【问题标题】:instance variables实例变量
【发布时间】:2012-09-19 13:45:20
【问题描述】:

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

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

【问题讨论】:

  • 你的两个变种差别很大,我不明白。 ://
  • 我认为您应该用文字描述您希望这些 sn-ps 做什么。
  • @unwind 不,他们没有,只是出于某些愚蠢的原因使用了不同的名称
  • @mgilson 并放松完成!对此感到抱歉
  • “self”这个词通常与 CLASS METHODS 相关联,但您谈论的是函数。到底怎么样?

标签: python function variables arguments instance


【解决方案1】:

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

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

【讨论】:

  • @WasiqKashkari 当您编写 input[:] = something 时,您正在修改名称 input 所指的对象;当您编写 input = something 时,您只是重新绑定名称 input 以引用 something
【解决方案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)

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多