AttributeError调用class1中的class2时,class1没有\uuu init \uuuuu attribu

2024-09-30 03:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我是OOP新手,正在尝试使用两个类。我正在尝试将一个直到Class1运行到Class2时才创建的属性馈送到Class1,但是当我运行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,所以我想我可以用x运行Class2,然后用function2和number来打印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的情况下消除此错误


Tags: 函数answertestselfnumberreturninitdef
2条回答

原因如下:

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本身传递给方法,这没有意义

很难理解您的代码,但一个明显的错误是在这一行

 answer=Class2.function2(Class2,number)

把它改成

 answer = test.function2(number)

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

相关问题 更多 >

    热门问题