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)
或没有,它将是0
var=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)
或没有,它将是0
var=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
只是该方法的局部变量。