我是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
的情况下消除此错误
原因如下:
首先,我们必须注意,以下是等价的:
我相信你想这样做:
如果我们执行上述转换,则与此相同:
请注意,原始代码在
Class2
之后缺少()
,这意味着不是将Class2
的实例传递给方法,而是将类型对象Class2
本身传递给方法,这没有意义很难理解您的代码,但一个明显的错误是在这一行
把它改成
通过使用必需的init参数调用对象来创建对象时,在调用类的函数时不需要传递self参数。它是自动传递的
相关问题 更多 >
编程相关推荐