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

2 投票
2 回答
2780 浏览
提问于 2025-05-10 22:59

我在想,下面这个问题为什么会失败;简单来说,就是一个继承的子类(SubClass)似乎无法访问它从父类(SuperClass)继承的一个属性。

顺便说一下,下面的三个文件都在同一个目录下,而且我使用的是Python3。

有没有什么想法?我觉得这可能是个非常简单的问题。谢谢!

父类(SuperClass./super_class.py)...

class SuperClass(object):

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

继承的子类(SubClass./sub_class.py)...

from super_class import SuperClass

class SubClass(SuperClass):

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

测试脚本(./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'

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

0

在继承的子类(SubClass./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的新写法可以避免输入错误类名可能出现的bug。

6

你使用的 super() 函数不太对。你应该这样使用:

super(SubClass, self).__init__()

或者在 Python 3 中

super().__init__()

你现在写的方式是从父类开始查找方法,而不是从你自己这个类开始查找。

撰写回答