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

时间:2015-02-08 17:24:56

标签: python class oop methods parameters

我对Python oop很新。所以,这堂课:

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

在我看来与

非常相似
class Foo:
    def barfunc(self, baz):
        self.baz = baz            
        print self.baz

输出会,我认为是相同的,所以我想知道这是首选的,为什么。也许我会错过使用其中一个或许的重大陷阱。 TY

3 个答案:

答案 0 :(得分:2)

如果你的目的是打印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

答案 1 :(得分:2)

一个主要的缺陷是你的术语 - 两个例子都没有显示一个类变量

在第一个示例中,baz是实例方法的参数,baz仅在该方法的本地范围内可用

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

答案 2 :(得分:0)

第一个例子只会在函数内部生效..但第二个例子会在整个类中生效..

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是类的整个实例,它在使用时会更改类的每个值,因为它在整个类中具有全局范围或范围。

运行此示例并询问您是否有任何疑问