python class 方法:参数作为 class 变量的优缺点

python class methods: parameter as class variables pros and cons

我对 Python oop 很陌生。所以,这个 class:

class Foo:
    def barfunc(self, baz):
        print baz

在我看来很像

class Foo:
    def barfunc(self, baz):
        self.baz = baz            
        print self.baz

输出会,我认为是一样的,所以我想知道哪个是首选以及为什么。也许我错过了使用一个或另一个的主要可能陷阱。

如果您的目标是只打印一次 baz,那么两者是等价的。

但是,如果您想稍后在您的代码中重新使用 baz,那么使用第二种方法是更好的方法,因为您现在可以添加其他方法来访问它。

class Foo(object):
    def barfunc(self, baz):
        self.baz = baz            
        print self.baz

    def barbar(self):
        print self.baz

现在你可以做到

>>> f = Foo()
>>> f.barfunc(10)
10
>>> f.barbar()
10

一个主要的陷阱是您的术语 - 两个示例都没有显示 class 变量

在第一个示例中,baz 是实例方法的参数,并且 baz 在该方法的局部范围内仅 可用

在第二个示例中,baz 是实例方法的参数,并在该方法中分配给实例属性 self.baz。调用该方法后,self.baz 将可用于 class 实例中的所有对象。

第一个示例仅在函数内部有效..但第二个示例将在整个 class..

中有效
class foo():
    bar=1
    def baz(self,bar):
        print bar
    def baz1(self,bar):
        self.bar=bar
a=foo()
a.bar
#prints 1
a.baz(2)
#prints 2
a.bar
#here it prints 1 again because it is the class variable which is not affected by the baz() function's local variable
a.baz1(3)
#prints 3
a.bar
#here the class variable value changes to 3 because self.bar changes the value of bar in entire class

self 是 class 的整个实例,它会在使用时更改 class 的每个值,即它在整个 class 中具有全局作用域或作用域。

运行这个例子,有疑问就问