【问题标题】:python store in self variable vs. passing to defpython存储在self变量中与传递给def
【发布时间】:2014-06-27 14:59:39
【问题描述】:

我应该如何在一个类的方法之间传递一个变量? 像这样,作为一个论点:

class Yadayada:
    def foo(self):
        for i in somelist:
            pass_var = i * blah blah blah
            output = self.bar(pass_var)

    def bar(self,pass_var):
        a= pass_var * whatever
        return a

或者像这样,将它存储在一个变量中?

class Yadayada:
    def foo(self):
        for i in somelist:
            self.pass_var = i * blah blah blah
            output = self.bar()

    def bar(self):
        a= self.pass_var * whatever
        return a

什么是最好的方法,为什么?或者它甚至重要吗? 注意:我不会在其余代码中使用变量 pass_var。

【问题讨论】:

  • 您绝对应该将它作为参数传递。您不会在类中的其他任何地方使用它这一事实意味着没有理由让它成为实例状态的一部分。

标签: python class methods


【解决方案1】:

这是一个设计决定。将其作为参数传递将在该函数的整个生命周期内保留传递的值。将其作为属性存储在对象上将在实例的生命周期内保留它 - 这可能会更长。

你应该问自己的问题是这个值是否有助于描述实例或者它是实例拥有的东西? - 如果其中任何一个是真实的,那么存储它。

如果它只是用来计算值的东西(听起来就是这样),那么就没有理由存储它。存储它意味着您想稍后使用它。

如果您不确定,请在将值传递给函数方面犯错。这减少了出错的机会(在类上没有设置值时调用函数),并且减少了正在使用的内存量。

【讨论】:

  • 感谢您的解释。只有一个后续问题。 “实例拥有”是什么意思?
  • @jason_cant_code 例如,Car 实例可能拥有 Wheel 实例。类的实例通常包含将整个事物的组件表示为单个实例的对象,或者它们管理的其他对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-19
  • 2015-06-28
  • 2015-02-20
相关资源
最近更新 更多