我对Python oop很新。所以,这堂课:
class Foo:
def barfunc(self, baz):
print baz
在我看来与
非常相似class Foo:
def barfunc(self, baz):
self.baz = baz
print self.baz
输出会,我认为是相同的,所以我想知道这是首选的,为什么。也许我会错过使用其中一个或许的重大陷阱。 TY
答案 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是类的整个实例,它在使用时会更改类的每个值,因为它在整个类中具有全局范围或范围。
运行此示例并询问您是否有任何疑问