Python的staticmethod和classmethod装饰器用法、区别

Python的staticmethod和classmethod装饰器会迷惑一些人,有的人总会纠结什么时候用怎么用。俺写了个简单的例子,很清楚就能看出来这几种方法的区别。什么时候用怎么用就不用再多说了吧。

# -*- coding:utf-8 -*-

class A(object):

def foo(self,x):

print "executing foo(%s,%s)"%(self,x)

@classmethod

def class_foo(cls,x):

print "executing class_foo(%s,%s)"%(cls,x)

cls().foo(x)

@staticmethod

def static_foo(x):

print "executing static_foo(%s)"%x

a=A()

a.foo(1)

print '1'

a.class_foo(1)

print '2'

A.class_foo(1)

print '3'

a.static_foo(1)

'''

executing foo(<__main__.A object at 0x01AA17F0>,1)

1

executing class_foo(,1)

executing foo(<__main__.A object at 0x01AA1830>,1)

2

executing class_foo(,1)

executing foo(<__main__.A object at 0x01AA1830>,1)

3

executing static_foo(1)

'''

已有2条评论 »

  1. @Tod 抱歉,换了个主题没注意看pre的样式

  2. Tod

    这代码颜色不打算给人看吗。。

添加新评论 »