Python存储在self变量和传递给函数的区别

9 投票
1 回答
3016 浏览
提问于 2025-04-18 06:02

我应该怎么在一个类的不同方法之间传递一个变量呢?

是像这样,把它当作参数传递:

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

这是一个设计上的选择。把它作为参数传递的话,这个值在函数运行期间会一直存在。而如果把它存储为对象的属性,那么这个值会在这个对象的整个生命周期内都存在,通常会比函数的生命周期长得多。

你需要问自己的是:这个值是用来描述这个对象的吗?还是说它是这个对象拥有的东西?如果这两种情况有任何一种成立,那就把它存储起来。

如果这个值只是用来计算其他值的(听起来就是这样),那么就没有必要存储它。存储它意味着你想在之后使用它。

如果你不确定,最好还是把这个值传递给函数。这样可以减少出错的机会(比如在调用函数时,这个值没有在类中设置),而且也能减少内存的使用。

撰写回答