在class1中调用class2时出现AttributeError,class1没有__init__属性

AttributeError when calling class2 within class1, class1 has no __init__ attribute

我是 OOP 新手,正在尝试使用两个 类。我正在尝试提供一个直到 Class1 是 运行 Class2 才创建的属性,但是当我 运行 Class1 时我得到一个 AttributeError .

class Class1():
    #some code....

    def function1():
        x=5
        number=2
        test=class2(x)

        answer=Class2.function2(Class2,number)
        print(answer)    

class Class2():
    def __init__(self, y):
        self.y=y

    def function2(self, z):
        calculated_answer=self.y+z
        return calculated_answer

    #several more functions that also use y

我试图避免在 Class2 的每个新函数中重复将 y 定义为 x,所以我想我可以 运行 Class2x 然后使用 function2 与数字打印 7。相反,我得到:AttributeError: type object 'Class2' has no attribute 'y'.

本来我以为是我误会了__init__,所以我运行这段代码来确定一下:

class Class2():
    def __init__(self, y):
        self.y=y

    def function2(self, z):
        calculated_answer=self.y+z
        return calculated_answer

x=5
test=class2(x)

但是当我在 shell 中输入 test.function2(2) 时,这工作正常,按预期返回 7

我想我一定是误解了如何使用 Class2,但我不知道我做错了什么。

如何在不在 Class2 中的每个函数中定义 x 的情况下消除此错误?

很难理解你的代码,但这一行有一个明显的错误。

 answer=Class2.function2(Class2,number)

改为

 answer = test.function2(number)

当您通过使用所需的 init 参数调用它来创建对象时,您不需要在调用 class 的函数时传递 self 参数。自动通过。

原因是这一行:

answer = Class2.function2(Class2, number)

首先,我们必须注意以下是等价的:

class A:

    def method(self):
        pass

A().method()
A.method(A())

我相信你想做这样的事情:

class2 = Class2()
answer = class2.function2(number)

如果我们执行上面的转换,那就是一样的:

answer = Class2.function2(Class2(), number)

请注意,您的原始代码在 Class2 之后缺少 (),这意味着不是将 Class2 实例传递给方法,您正在传递 类型对象 Class2 本身,这没有意义。