私は以下のコードを持っています。この例では、子クラスが親クラスからメソッドを継承しないのはなぜですか?
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
方法があります。
EDIT:コメントアウトされているsuperを呼び出すとうまくいきます。
__variablenameが特別な変数であるため、わかりませんが、そうではありませんか? http://stackoverflow.com/a/1301369/2537322 – meyer9
もっと奇妙なことに、なぜあなたは 'super()'を呼び出すのですか? –
答えはありませんが、詳細を追加します - '__baz'から' baz'に変更すると、両方ともprint 21を呼び出します。 'super()'を呼び出して '__baz'として残すと' 40'と '21'それぞれ、 –