实例变量

2024-06-26 01:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有可能在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()

我真的不想这样做,因为这意味着要创建更多的函数


Tags: 函数selfinputoutputreturnfoodefsome
2条回答

另一个解决方案是使用特制的容器。你知道吗

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)

在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)

这之所以有效,是因为您正在对list对象进行变异(通过分配给一个完整的片),而不是重新绑定它(一个空的=)。你知道吗

相关问题 更多 >