返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?
Posted
技术标签:
【中文标题】返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?【英文标题】:Returning the value of a function with multiple input parameters to use in another function with multiple parameters inside the same Class? 【发布时间】:2018-10-28 23:31:00 【问题描述】:现在我知道有很多重复的人在问类似的问题[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 的结果,而无需再次重新定义所有输入参数。
【问题讨论】:
【参考方案1】:input4
是一个参数,其范围是function1
的本地变量。这同样适用于input5
和input6
。您需要使用__init__
中的self
分配它们,以便使用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
【讨论】:
【参考方案2】:self.input4
没有意义,因为它不是您在__init__
中提供给self
的字段。
如果你想在function2
中使用self.input4
,那么__init__
或者function1
需要分配self.input4 = # something
。
【讨论】:
【参考方案3】:只需向function2
添加另一个参数,您就可以将function1
的结果传递给function2
,或者在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, res1):
something2 = res1+input7+input8
return something2
a = Something(1,2,3)
# just save the result of function1 and pass it to function2
res1 = a.function1(4,5,6)
print(res1)
print(a.function2(7, 8, res1))
# or just call function1 in the arg list of function2
print(a.function2(7, 8, a.function1(4,5,6)))
【讨论】:
【参考方案4】:“范围”是一个花哨的术语,表示可访问性,通常是变量的生命周期。在function2
中看不到input4
,因为它仅在function1
中由名称input4
定义。如果你想在另一个函数中使用它,你应该将它作为参数传递或保存为状态。
您的第二个函数实际上并不直接依赖于对象的内部状态,因此您可以将其拆分为与您的类分开的函数。 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))
【讨论】:
以上是关于返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?的主要内容,如果未能解决你的问题,请参考以下文章