现在,我知道有很多重复项在问类似的问题[1] [2] [3] [4] [5],但是我相信没有一个人会用另一个函数中有多个输入参数,并且同一类中有多个参数;碰巧是我的特殊问题(除非我在搜索过程中错过了它)。
下面是一个最小的工作示例,我试图在function2中使用function1的结果:
class Something():
def __init__(self,input1, input2, input3):
self.input1 = input1
self.input2 = input2
self.input3 = input3
def function1(self, input4, input5, input6):
something = (self.input1 + self.input2 + self.input3)+input4+input5+input6
return something
def function2(self, input7, input8):
something2 = self.function1(self.input4, self.input5, self.input6)+input7+input8
return something2
a = Something(1,2,3)
print(a.function1(4,5,6))
print(a.function2(7, 8))
Function1可以正常打印,但是当我调用Function2时,出现错误:
AttributeError: 'Something' object has no attribute 'input4'
我这里可能缺少一个简单的步骤,但是我似乎无法弄清楚如何在function2内使用function1的结果而不必重新定义所有输入参数。
答案 0 :(得分:1)
input4
是一个自变量,其作用域在function1
中是局部的。 input5
和input6
也是如此。您需要使用self
中的__init__
来分配它们,以便使用self
实例的类方法可以访问它们。如果您希望在不重新定义参数列表的情况下访问这些变量,则可以使用self
function1
来分配它们
class Something():
def __init__(self,input1, input2, input3):
self.input1 = input1
self.input2 = input2
self.input3 = input3
def function1(self, input4, input5, input6):
self.input4 = input4
self.input5 = input5
self.input6 = input6
something = (self.input1 + self.input2 + self.input3)+input4+input5+input6
return something
def function2(self, input7, input8):
something2 = self.function1(self.input4, self.input5, self.input6)+input7+input8
return something2
a = Something(1,2,3)
print(a.function1(4,5,6))
print(a.function2(7, 8))
# 21
# 36
答案 1 :(得分:0)
self.input4
毫无意义,因为它不是您在self
中为__init__
赋予的字段。
如果您想在self.input4
中使用function2
,则__init__
或function1
都需要分配self.input4 = # something
。
答案 2 :(得分:0)
只需向function2
添加另一个参数,您就可以将function1
的结果传递给function2
,或者只在{{1}的参数中调用function1
}。
function2
答案 3 :(得分:0)
“范围”是一个奇特的术语,表示变量的可访问性,并且通常是变量的生存期。 input4
在function2
内部看不到,因为它仅由input4
中的名称function1
定义。如果要在其他函数中使用它,则应将其作为参数传递或保存为状态。
您的第二个函数实际上并不直接依赖于对象的内部状态,因此您可以将其拆分为与类分离的函数。 function1
应该具有含义并将该含义传递给您的其他函数。
# A separately reusable function, not dependent on Something
def function2(foo, input7, input8):
something2 = foo + input7 + input8
return something2
class Something():
def __init__(self,input1, input2, input3):
self.input1 = input1
self.input2 = input2
self.input3 = input3
def function1(self, input4, input5, input6):
something = (self.input1 + self.input2 + self.input3)+input4+input5+input6
return something
a = Something(1,2,3)
print(a.function1(4,5,6))
print(function2(a.function1(4,5,6), 8))