__class__ & self & 繼承
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.aclass E(D):
def __init__(self, other_args):
self.other = other_args
如果看不懂的話應該是平常沒有用到吧……..大概。
就醬。