bra*_*orm 9 python oop inheritance
我有以下代码.
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()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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'
Run Code Online (Sandbox Code Playgroud)
为什么这个foo方法没有继承Bar.
编辑:它工作正常,如果你打电话给超级评论.
双下划线属性的名称会根据当前/包含的命名空间进行修改.在函数中foo,Foo当python查找时self.__baz,当前命名空间是如此,它实际上将self._Foo__baz由于名称修改方案而查找.由于Foo您实际上没有设置__baz属性,因此该类没有_Foo__baz属性(它具有_Bar__baz属性,因为您self.__baz在其中的方法中设置Bar).
当然,你可能已经注意到,如果你调用Foo.__init__(self)在Baz.__init__(直接或通过super),你会看到问题消失,因为Foo.__init__套__baz(即_Foo__baz).