实例变量

时间:2012-09-19 13:45:20

标签: python function variables arguments instance

我想知道是否可以在python中创建一个函数foo,以便

def calulate (self, input):
    input = #some stuff

def foo2(self):
    self.calculate(self.var1)
    self.calculate(self.var2)

或者你必须这样做

def calculation(self):
    output=#some stuff
    return output
def foovar1(self):
    self.var1=self.calculation()
    self.var2=self.calculation()

我真的不想这样做,因为这意味着要创造更多的功能

2 个答案:

答案 0 :(得分:2)

在Python中,您可以改变函数参数,但不能直接在调用者的作用域中重新绑定它们。您可以传递实例成员名称:

def foo(self, inputname):
    setattr(self, inputname, #some stuff)

def foo2(self):
    self.foo('var1')
    self.foo('var2')

或者,如果self.var1是可变对象,例如你可以写一个清单:

def foo (self, input):
    input[:] = #some stuff

def foo2(self):
    self.foo(self.var1)
    self.foo(self.var2)

这是有效的,因为你正在改变列表对象(通过分配一个完整的切片)而不是重新绑定它(一个裸=)。

答案 1 :(得分:0)

另一种解决方案可能是拥有一个特制的容器。

class Container(object):
    def __init__(self, value=None):
        self.value = value

然后在另一个类中使用它:

def foo(self, container):
    container.value = ...

def foo2(self):
    self.foo(self.var1)
    self.foo(self.var2)