Python 属性错误:';myclass';对象没有属性';x';
如果我有一个名为Python 属性错误:';myclass';对象没有属性';x';,python,oop,Python,Oop,如果我有一个名为myclass的类定义如下 cl_测试.py class myclass(): def fx1(self, a): x = a print(a) def fx2(self, b): c = self.x + b print(c) import cl_test var = cl_test.myclass() var.fx1(5) var.fx2(3) 我在另一个Python文件中调用这两个函数
myclass
的类定义如下
cl_测试.py
class myclass():
def fx1(self, a):
x = a
print(a)
def fx2(self, b):
c = self.x + b
print(c)
import cl_test
var = cl_test.myclass()
var.fx1(5)
var.fx2(3)
我在另一个Python文件中调用这两个函数,如下所示
test.py
class myclass():
def fx1(self, a):
x = a
print(a)
def fx2(self, b):
c = self.x + b
print(c)
import cl_test
var = cl_test.myclass()
var.fx1(5)
var.fx2(3)
虽然函数fx1(5)
被执行并打印5
,但是在执行第二个函数fx2(3)
时,它抛出以下错误-
c = self.x + b
AttributeError: 'myclass' object has no attribute 'x'
但是fx2(3)
的预期输出应该是8
我哪里出错了?在
fx1
中,变量x
是方法的局部变量,您可以将其指定为self
def fx1(self, a):
self.x = a
print(a)
但是,您也可以在\uuuu init\uuuu
中初始化此属性,因为如果不初始化,如果在没有fx1
的情况下调用fx2
,您将出现相同的错误,因为您从未分配x
,以下代码允许使用初始值调用var=cl\u test.myclass(2)
或没有,它将是0var=cl\u test.myclass()
在fx1
中,变量x
是方法的本地变量,您可以将其指定为self
def fx1(self, a):
self.x = a
print(a)
但是,您也可以在\uuuu init\uuuu
中初始化此属性,因为如果不初始化,如果在没有fx1
的情况下调用fx2
,您将出现相同的错误,因为您从未分配x
,以下代码允许使用初始值调用var=cl\u test.myclass(2)
或没有,它将是0var=cl\u test.myclass()
您需要向第一个函数添加self.x
。只要将x
作为一个变量放在那里,它就只能在这个函数中访问。使用self.x
可以让整个班级都能接受。
以下是myclass()
的最终版本:
class myclass():
def fx1(自身,a):
self.x=a
印刷品(a)
def fx2(自身,b):
c=自身x+b
印刷品(c)
您需要在第一个函数中添加self.x
。只要将x
作为一个变量放在那里,它就只能在这个函数中访问。使用self.x
可以让整个班级都能接受。
以下是myclass()
的最终版本:
class myclass():
def fx1(自身,a):
self.x=a
印刷品(a)
def fx2(自身,b):
c=自身x+b
印刷品(c)
在您的代码中,在fx2()中,它不知道什么是变量x
。因此,为了修复它,您需要编写self.x
,除了x之外,只需用对象引用x
最终结果:
class myclass():
def fx1(self, a):
self.x = a
print(a)
def fx2(self, b):
c = self.x + b
print(c)
以及:
在您的代码中,在fx2()中,它不知道什么是变量x
。因此,为了修复它,您需要编写self.x
,除了x之外,只需用对象引用x
最终结果:
class myclass():
def fx1(self, a):
self.x = a
print(a)
def fx2(self, b):
c = self.x + b
print(c)
以及:
在fx1()中,您需要将x=a
更改为self.x=a
很酷,它现在可以工作了,但是为什么我需要将x=a
更改为self.x=a
?您需要在python中指定一个约定,以便可以在类中识别实例变量。”“自我”是这个惯例。除非您执行self.x
,否则,x
本身只是该方法的局部变量。在fx1()中,您需要将x=a
更改为self.x=a
酷,它现在可以工作了,但是为什么我需要将x=a
更改为self.x=a
?您需要在python中指定约定,以便在类中识别实例变量“自我”是这个惯例。除非您执行self.x
,否则,x
只是该方法的局部变量。