Python :: 超类中的属性在子类中不可用
我在想,下面这个问题为什么会失败;简单来说,就是一个继承的子类(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__()
你现在写的方式是从父类开始查找方法,而不是从你自己这个类开始查找。