J'ai le code suivant.Pourquoi la classe enfant n'hérite-t-elle pas la méthode de la classe parente dans python dans cet exemple?
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()
Je reçois cette erreur:
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'
pourquoi est la méthode foo
pas hérité dans Bar
.
EDIT: Cela fonctionne très bien, si vous appelez super qui est mis en commentaire.
Vous ne savez pas, mais n'est-ce pas parce que __variablename est une variable spéciale? http://stackoverflow.com/a/1301369/2537322 – meyer9
Plus curieusement, pourquoi cela * fonctionne * si vous appelez 'super()'? –
Pas une réponse, mais ajoute plus de détails - si vous le changez de '__baz' à' baz' les deux appels impriment 21. Si vous appelez 'super()' et laissez comme '__baz' ils impriment '40' et' 21' respectivement. –