超类中的Python::Attribute在继承子类时不可用

2024-10-01 11:31:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道为什么下面的方法失败了;基本上继承子类(子类)似乎无法访问它继承的超类(超类)中的属性。在

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

有什么想法吗?我觉得这是件非常简单的事。谢谢您!在

超类(超类中的/super_类.py)。。。在

class SuperClass(object):

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

继承子类(子类/sub中_类.py)。。。在

^{pr2}$

驱动程序/测试人员脚本(/驱动程序.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'

Tags: 方法pyself属性objectvaluedriver驱动程序
2条回答

在继承子类中(子类中/sub_类.py),更改此:

from super_class import SuperClass

class SubClass(SuperClass):

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

为此:

^{pr2}$

顺便说一句,python-3的新咒语避免了键入错误类的可能错误。在

您错误地使用了^{}函数。您应该使用:

super(SubClass, self).__init__()

或者在Python3中

^{pr2}$

你写的方式就是在父类之后开始MRO,而不是在你自己的类之后。。在

相关问题 更多 >