__class__ & self & 繼承

貓橘毛 aka Lanfon
2 min readMay 22, 2018

--

記一下免得以後又忘了….

總之直接來看 code::

如果你覺得輸出是 B <class B> <C object> & A <class A> <C object> 的話,請告訴我是不是哪本書上有寫……((完全沒印象看過的書有

好吧感覺 Python 2 的書應該會有,畢竟 super() 第一個參數會踩到….(如果用 super(type(self), self) 或是 super(self.__class__, self) 的話)

簡單說 __class__ 會在宣告時期被綁定,所以 __class__ 一定是同一個 scope 的類別物件。(例如在 class B 裡面就一定會綁到 class B)

self 的話是因為在執行時期(object initialize)才綁定,所以 C 呼叫 calc() 的時候, B 拿到的 self 會是 <C object> 而不是 <B object>

就醬。

來講講額外的部份。

  • __class__ 會在宣告時期被綁定,也就是說用 @staticmethod 的靜態方法也可以在 function scope 裡面藉由 __class__ 存取 class attributes.
  • __init__ 如果有 suppress 的行為,很可能間接導致父類別的方法無法使用。例如:
class D:
def __init__(self, a):
self.a = a
def calc(self):
return self.a
class E(D):
def __init__(self, other_args):
self.other = other_args

如果看不懂的話應該是平常沒有用到吧……..大概。

就醬。

--

--

貓橘毛 aka Lanfon
貓橘毛 aka Lanfon

Written by 貓橘毛 aka Lanfon

知,不知,上;不知,知,病。

Responses (1)