来源:http://jianfeihit.iteye.com/blog/1839554
http://www.cnblogs.com/bjdxy/archive/2012/12/04/2802164.html
1、新的对象模型提供了两种类方法(传统对象模型没有这些方法):静态方法和类方法
2、静态方法可以直接被类或类实例调用。它没有常规方法那样的特殊行为(绑定、非绑定、默认的第一个参数规则等等)。完全可以将静态方法当成一个用属性引用方式调用的普通函数来看待。
3、一个类方法就是你可以通过类或它的实例来调用的方法, 不管你是用类调用这个方法还是类的实例调用这个方法,python只会将实际的类对象做为该方法的第一个参数.记住:方法的第一个参数都是类对象而不是实例对象. 按照惯例,类方法的第一个形参被命名为 cls
4、类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用
5、类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数
6、新型类中新增加了slots和property,这两个比较特殊
7、实例可以拥有与类不一样的方法,这个是通过动态绑定实现的。
class TestClassMethod(object): METHOD = 'method hoho' def __init__(self): self.name = 'leon' def test1(self): print 'test1' print self @classmethod def test2(cls): print cls print 'test2' print TestClassMethod.METHOD print '----------------' @staticmethod def test3(): print TestClassMethod.METHOD print 'test3' if __name__ == '__main__': a = TestClassMethod() a.test1() a.test2() a.test3() TestClassMethod.test3()
test1为实例方法
test2为类方法,第一个参数为类本身
test3为静态方法,可以不接收参数
类方法和静态方法皆可以访问类的静态变量(类变量),但不能访问实例变量,test2、test3是不能访问self.name的,而test1则可以
程序运行结果: