直观上看,classmethod和staticmethod的函数签名不一样,一个是有参的,一个是无参的。
都属于python的装饰器,注意在classmethod里,参数不一定必须是cls,可以是任何命名的变量。在不涉及到父子类的时候,这2者行为看起来是一样的,但如果设计到父子类的时候,classmethod可以判断出调用的子类对象
# -*- coding: utf-8 -*-
class Parent(object):
@staticmethod
def staticSayHello():
print "Parent static"
@classmethod
def classSayHello(anything): #这里是anything
if anything == Boy:
print "Boy classSayHello"
elif anything == Girl:
print "girl sayHello"
class Boy(Parent):
pass
class Girl(Parent):
pass
if __name__ == '__main__':
Boy.classSayHello()
Girl.classSayHello()