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.
的错误
我想知道为什么下面的失败;基本上,继承的 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.
的错误