https://cloud.tencent.com/developer/article/1915788
修改代码以解决报错
class Class_1():
var_1 = 1
def __init__(self):
self.var_2 = var_1
class Class_2(Class_1):
def __init__(self):
self.var_4 = self.var_2
obj = Class_2()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[21], line 12
9 def __init__(self):
10 self.var_4 = self.var_2
---> 12 obj = Class_2()
Cell In[21], line 10, in Class_2.__init__(self)
9 def __init__(self):
---> 10 self.var_4 = self.var_2
AttributeError: 'Class_2' object has no attribute 'var_2'
在这段代码中,报错是因为在Class_2的构造函数中,你尝试访问self.var_2,但是var_2并不存在于Class_2中。这是因为var_2是Class_1的实例变量,而不是Class_2的实例变量。
要解决这个问题,你可以在Class_2的构造函数中调用父类(Class_1)的构造函数,以确保var_2被正确地初始化。你可以使用super()函数来实现这一点。修改后的代码如下所示:
class Class_1():
var_1 = 1
def __init__(self):
self.var_2 = Class_1.var_1
class Class_2(Class_1):
def __init__(self):
super().__init__() # 调用父类的构造函数
self.var_4 = self.var_2
obj = Class_2()
通过调用super().__init__(),你可以确保Class_1的构造函数被调用,从而正确初始化var_2。现在,你应该能够成功创建Class_2的实例对象,而不会再出现AttributeError的错误。
修改代码以解决报错
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[22], line 7
4 def __init__(self):
5 self.var_2 = var_1
----> 7 class Class_2(Class_1):
8 var_3 = var_1
10 obj = Class_2()
Cell In[22], line 8, in Class_2()
7 class Class_2(Class_1):
----> 8 var_3 = var_1
NameError: name 'var_1' is not defined
在这段代码中,报错是因为在Class_2的定义中,你尝试访问var_1,但是var_1并没有在Class_2的作用域中定义。这导致了NameError。
要解决这个问题,你可以使用Class_1.var_1来访问Class_1中的var_1变量。这样可以确保在Class_2中正确引用父类的变量。修改后的代码如下所示:
class Class_1():
var_1 = 1
def __init__(self):
self.var_2 = Class_1.var_1
class Class_2(Class_1):
var_3 = Class_1.var_1
obj = Class_2()
通过使用Class_1.var_1,你可以在Class_2中正确引用父类的变量。现在,你应该能够成功创建Class_2的实例对象,而不会再出现NameError的错误。
标签:__,python,继承,self,面向对象,init,var,Class,def From: https://blog.51cto.com/u_16055028/7088088