我有以下代碼。爲什麼在這個例子中,子類不會繼承python中父類的方法?
class Foo(object):
def __init__(self):
self.__baz = 40
def foo(self):
print self.__baz
class Bar(Foo):
def __init__(self):
#super(Bar, self).__init__()
self.__baz = 21
def bar(self):
print self.__baz
x = Bar()
x.foo()
x.bar()
我得到這個錯誤:
Traceback (most recent call last):
File "classes.py", line 15, in <module>
x.foo()
File "classes.py", line 5, in foo
print self.__baz
AttributeError: 'Bar' object has no attribute '_Foo__baz'
爲什麼在Bar
不是繼承了foo
方法。
編輯:它工作正常,如果你打電話超級被註釋掉。
不確定,但不是因爲__variablename是一個特殊變量嗎? http://stackoverflow.com/a/1301369/2537322 – meyer9
更奇怪的是,爲什麼它*工作*如果你調用'super()'? – 2013-09-27 04:08:05
不是一個答案,但增加了更多細節 - 如果你將它從__baz改到baz,這兩個調用都打印21.如果你調用'super()'並且以'__baz'離開,他們會打印'40'和'21'分別。 – 2013-09-27 04:09:32