這部作品的原因是因爲你使用ClassB.__init__()
修改ClassA
的self
parmeter。
當你通過self
到ClassB
的ClassA.__init__()
內,ClassB.__init__()
接受分配的屬性punk
它傳遞的對象。 通常情況下,self
應該是ClassB
的一個實例,因爲Python會隱式傳遞值self
。但是因爲你明確地傳遞了一個不同的參數 - 一個ClassA
的實例 - Python使用該值代替。
這可以看作一個簡單的例子:
>>> class A:
def __init__(self):
B.__init__(self)
>>> class B:
def __init__(self):
print('The type of self is: ', self)
>>> a = A()
The type of self is: <__main__.A object at 0x03E9A050>
>>>
如@chepner所提到的,其作爲如果使用常規方法和調用相同的是ClassA
的的內部構造:
>>> class A:
def __init__(self):
B.method(self)
>>> class B:
def method(self):
print('The type of self is: ', self)
>>> a = A()
The type of self is: <__main__.A object at 0x03E9A670>
>>>
__init__只是一個在創建對象時自動調用的方法,但它不會創建對象,它只是獲取對象並設置一些屬性。這就是爲什麼它不是問題。 – doratheexplorer0911
請注意,在Python 2中有一個檢查來阻止它,但它們將它取出,因爲他們認爲它不值得擁有。 – user2357112