Python :: 超类中的属性在继承子类中不可用

Python :: Attribute in superclass not available in inheriting subclass

我想知道为什么下面的失败;基本上,继承的 subclass (SubClass) 似乎无法访问 superclass (SuperClass) 它继承自。

顺便说一下,下面所有三个文件都在同一个目录中,为了完整起见,我使用 Python3。

有什么想法吗?我认为这是非常简单的事情。谢谢!

超级class (SuperClass in ./super_class.py) ...

class SuperClass(object):

   def __init__(self):
      self.varSuper = 'varSuper_value'

继承子class (SubClass in ./sub_class.py) ...

from super_class import SuperClass

class SubClass(SuperClass):

  def __init__(self):
     super(SuperClass, self).__init__()
     self.varSub = 'varSub_value'

driver/tester脚本(./driver.py) ...

#! /usr/bin/env python3

from sub_class import SubClass

print(SubClass().varSub)    # Works: "varSub_value"
print(SubClass().varSuper)  # Excepts: I expected "varSuper_value"

异常...

user@linux$ ./driver.py
varSub_value                                  <--- GOOD
Traceback (most recent call last):
  File "./driver.py", line 6, in <module>
    print(SubClass().varSuper)                <--- NO GOOD
AttributeError: 'SubClass' object has no attribute 'varSuper'

您使用的 super() 功能有误。你应该使用:

super(SubClass, self).__init__()

或在python3

super().__init__()

按照您编写的方式,您是在父 class 之后启动 MRO,而不是在您自己的 class..

之后

在继承子 class (SubClass in ./sub_class.py) 中,更改为:

from super_class import SuperClass

class SubClass(SuperClass):

  def __init__(self):
     super(SuperClass, self).__init__()   # <---- INCORRECT. CHANGE THIS.
     self.varSub = 'varSub_value'

为此:

from super_class import SuperClass

class SubClass(SuperClass):

  def __init__(self):
     super(SubClass, self).__init__()   # <---- TO THIS in python-2 (also still valid in Python-3)
     super().__init__()                 # <---- OR THIS for python-3 (New style in python-3)
     self.varSub = 'varSub_value'

顺便说一句,python-3 新咒语避免了可能输入错误 class.

的错误