在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
,所以我想我可以 运行 Class2
与 x
然后使用 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
本身,这没有意义。
我是 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
,所以我想我可以 运行 Class2
与 x
然后使用 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
本身,这没有意义。