Tôi có mã sau đây.Tại sao lớp con không kế thừa phương thức từ lớp cha trong python trong ví dụ này?
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()
tôi nhận được lỗi này:
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'
tại sao là foo
phương pháp không được thừa kế trong Bar
.
EDIT: Nó hoạt động tốt, nếu bạn gọi siêu được nhận xét.
Không chắc chắn, nhưng không phải vì __variablename là một biến đặc biệt? http://stackoverflow.com/a/1301369/2537322 – meyer9
Rất tò mò, tại sao nó * làm việc * nếu bạn gọi 'super()'? –
Không phải là câu trả lời, nhưng thêm chi tiết hơn - nếu bạn thay đổi từ '__baz' thành' baz' cả hai cuộc gọi in 21. Nếu bạn gọi 'super()' và để nguyên là '__baz', chúng in' 40' và '21' tương ứng. –