我正在尝试从基类访问变量。这是父类:
class Parent(object):
def __init__(self, value):
self.some_var = value
这是儿童班:
class Child(Parent):
def __init__(self, value):
super(Child, self).__init__(value)
def doSomething(self):
parent_var = super(Child, self).some_var
现在,如果我尝试运行此代码:
obj = Child(123)
obj.doSomething()
我得到以下异常:
Traceback (most recent call last):
File "test.py", line 13, in <module>
obj.doSomething()
File "test.py", line 10, in doSomething
parent_var = super(Child, self).some_var
AttributeError: 'super' object has no attribute 'some_var'
我做错了什么?在Python中从基类访问变量的推荐方法是什么?
答案 0 :(得分:20)
在基类的__init__
运行之后,派生对象具有在那里设置的属性(例如some_var
),因为它与派生类'{{中self
的对象完全相同1}}。您可以而且应该只在任何地方使用__init__
。 self.some_var
用于从基类访问内容,但实例变量(如名称所示)是实例的一部分,而不是该实例类的一部分。
答案 1 :(得分:5)
Parent类中不存在some_var属性。
在__init__
期间设置时,它是在您的Child类的实例中创建的。
答案 2 :(得分:0)
我遇到了同样的错误,这是一个愚蠢的错误
第一类: def init(自我): 打印(“初始化”) 定义状态(自我): print("这是从 1")
这是我的父类
class two:
def __init__(self):
print("init")
def status(self):
super().status()
print("This is from 2")
这是儿童班
a = one()
a.status()
b = two()
b.status()
我遇到了同样的错误
init
This is from 1
init
Traceback (most recent call last):
File "<string>", line 20, in <module>
File "<string>", line 12, in status
AttributeError: 'super' object has no attribute 'status'
>
问题是,我在声明第二类后没有输入参数, “第二类:”应该是“第二类(一)” 所以解决方案是。
class two(one):
def __init__(self):
print("init")
def status(self):
super().status()
print("This is from 2")