为什么子类在本例中没有从python中的父类继承方法?

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.

编辑:它工作正常,如果你打电话给超级评论.

mgi*_*son 8

双下划线属性的名称会根据当前/包含的命名空间进行修改.在函数中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).