我是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
我试图避免在y
中的每个新函数中重复将x
定义为Class2
,所以我认为我可以只用{{1 }},然后使用带有数字的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)
时,此方法很好用。
我认为我一定误会了如何使用test.function2(2)
,但是我不知道自己在做什么错。
如何在不只在7
中的每个函数中定义Class2
的情况下消除此错误?
答案 0 :(得分:1)
原因是这一行:
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
本身,没有任何意义。
答案 1 :(得分:0)
很难理解您的代码,但这一行是一个明显的错误。
answer=Class2.function2(Class2,number)
将其更改为
answer = test.function2(number)
当通过使用必需的init参数调用对象来创建对象时,在调用类的函数时无需传递self参数。它会自动传递。