python @staticmethod和@classmethod

首先记住: 面向对象的三大特点是 数据封装、继承和多态

python 其实有3个方法,即静态方法(@staticmethod),类方法(@classmethod)和实例方法;

class A(object):
    def foo(self,x):
        print u"A类下函数foo的参数:",x
    @classmethod#类方法
    def class_foo(cls,x):
        print u"A类下函数class_foo的参数:",x

    @staticmethod
    def static_method(x):
        print u"A类下函数static_foo的参数:",x


a=A()
a.foo("w")
a.class_foo("e")
a.static_method("r")

# A.foo("t")报错
A.static_method("Y")
A.class_foo("U")

普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。

静态方法

如果用了装饰器@staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。

类方法

而对于装饰器@classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

注意:

实例方法的调用离不开实例,需要把实例自己传给函数,所有类里的函数需要foo(sel,x),类方法一样,只不过他传递的是类不是实例,A.class_foo(x);

对于静态方法和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)或者A.static_foo(x)来调用。

 类的一些相关知识:

 
原文地址:https://www.cnblogs.com/qxh-beijing2016/p/12977037.html