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 中具有全局作用域或作用域。
运行这个例子,有疑问就问
我对 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 中具有全局作用域或作用域。
运行这个例子,有疑问就问