這跟在幾個小時前我問過的一個問題。對基類行爲感到困惑
我有這樣的代碼:
class A(object):
def __init__(self, a):
print 'A called.'
self.a = a
class B(A):
def __init__(self, b, a):
print 'B called.'
x = B(1, 2)
print x.a
這給了錯誤:AttributeError: 'B' object has no attribute 'a'
,符合市場預期。我可以通過撥打super(B, self).__init__(a)
來解決這個問題。
不過,我有這樣的代碼:
class A(object):
def __init__(self, a):
print 'A called.'
self.a = a
class B(A):
def __init__(self, b, a):
print 'B called.'
print a
x = B(1, 2)
,其輸出是:
B called.
2
爲什麼這項工作?更重要的是,當我沒有初始化基類時它是如何工作的?另外請注意,它不會調用A
的初始值設定項。是不是因爲當我做了:
def __init__(self, b, a)
我聲明b
是的B
屬性?如果是,我該如何檢查b
是哪個類的屬性 - 子類或超類?
啊,我現在明白了。謝謝! – Jeremy 2010-09-12 14:57:12
我是否正確地調用'b'類的屬性或者是否存在其他一些Pythonic術語? – Jeremy 2010-09-12 15:01:12
嗯,最重要的是,'實例變量'和'實例屬性'有什麼區別? – Jeremy 2010-09-12 15:02:43