首页 » python编程 » python中关于静态方法、类方法以及实例方法的区别

python中关于静态方法、类方法以及实例方法的区别

时间:2013-01-09作者:felix.chan分类:python编程评论:0

静态方法、类方法以及实例方法的区别
在Python 2.2中,在类中定义方法是可能的,不需要实例就能够调用它:静态方法的运作差不多就像类中的简单无实例函数,而类方法传递的是类而不是实例。名为 staticmethod和classmethod的特定的内置函数,必须在类中调用,才能使这些方法模式有效。虽然这个功能是伴随新式类增加的,但静态 和类方法也能用于经典类。
定义方式,传入的参数,调用方式都不相同。

staticmethod 不需要传入self和cls对象,只有一般的参数。可以通过实例或类对象进行调用。
classmethod需要传入cls对象,可以通过实例和类对象进行调用。
实例method需要传入self实例对象,可以通过实例对象调用,用类调用时需要额外传入 实例对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> class Multi:
...   def imeth(self, x):
...     print self, x
...   def smeth(x):
...     print x
...   def cmeth(cls, x):
...     print cls, x
...   smeth = staticmethod(smeth)   #make smeth a static method
...   cmeth = classmethod(cmeth)    #make cmeth a class method
...
>>> obj = Multi()
>>> obj.imeth(1)       #Normal call, through instance
<__main__ .Multi instance at 0x7fc537cc6170> 1
>>> Multi.imeth(obj,2)   #Normal call, through class
</__main__><__main__ .Multi instance at 0x7fc537cc6170> 2
>>> Multi.smeth(3)    #Static call, through class
3
>>> obj.smeth(4)      #Static call, through instance
4
>>> Multi.cmeth(5)    #Class call, through class
__main__.Multi 5
>>> obj.cmeth(6)      #Class call, through instance
__main__.Multi 6
</__main__>

注: Python自动把类(而不是实例)传入类方法第一个(最左侧)参数中。

原创文章,转载请注明: 转载自红防联盟www.rednat.com

本文链接地址: python中关于静态方法、类方法以及实例方法的区别

|2|right
Tags: ,
0 条评论

暂时没有评论!

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>