返回具有多个输入参数的函数的值,以在同一类中具有多个参数的另一个函数中使用?

时间:2018-10-28 23:31:01

标签: python python-3.x

现在,我知道有很多重复项在问类似的问题[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的结果而不必重新定义所有输入参数。

4 个答案:

答案 0 :(得分:1)

input4是一个自变量,其作用域在function1中是局部的。 input5input6也是如此。您需要使用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)

“范围”是一个奇特的术语,表示变量的可访问性,并且通常是变量的生存期。 input4function2内部看不到,因为它仅由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))