Mam następujący kod.Dlaczego klasa podrzędna nie dziedziczy metody z klasy nadrzędnej w pythonie w tym przykładzie?
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()
otrzymuję ten błąd:
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'
dlaczego jest metoda foo
nie odziedziczyła w Bar
.
EDYTOWANIE: Działa dobrze, jeśli zadzwonisz super, który jest skomentowany.
Nie jestem pewien, ale czy nie dlatego, że zmienna __varia jest specjalną zmienną? http://stackoverflow.com/a/1301369/2537322 – meyer9
Co ciekawsze, dlaczego to * działa *, jeśli wywołasz 'super()'? –
Brak odpowiedzi, ale dodaje więcej szczegółów - jeśli zmienisz ją z '__baz' na' baz', oba wywołania wypiszą 21. Jeśli wywołasz 'super()' i opuścisz jako '__baz', wydrukują' 40' i '21' odpowiednio. –