Python存储在self变量和传递给函数的区别
我应该怎么在一个类的不同方法之间传递一个变量呢?
是像这样,把它当作参数传递:
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。
1 个回答
16
这是一个设计上的选择。把它作为参数传递的话,这个值在函数运行期间会一直存在。而如果把它存储为对象的属性,那么这个值会在这个对象的整个生命周期内都存在,通常会比函数的生命周期长得多。
你需要问自己的是:这个值是用来描述这个对象的吗?还是说它是这个对象拥有的东西?如果这两种情况有任何一种成立,那就把它存储起来。
如果这个值只是用来计算其他值的(听起来就是这样),那么就没有必要存储它。存储它意味着你想在之后使用它。
如果你不确定,最好还是把这个值传递给函数。这样可以减少出错的机会(比如在调用函数时,这个值没有在类中设置),而且也能减少内存的使用。