python编程实例之静态方法与类方法

发布时间:2020-05-09编辑:脚本学堂
本文介绍了python有静态方法与类方法的相关知识,python编程实例之静态方法与类方法教程,需要的朋友参考下。

python编程中,一些静态方法独立于类和类的实例,它是定义在类作用域内的方法。可以由类和实例直接调用。

类方法和静态方法都要使用装饰器来定义,定义的基本格式是:
 

复制代码 代码示例:
@staticmethod
def <function name>():
     #do something

类方法定义的基本格式是:
 

复制代码 代码示例:
@ classmethod
def <function name>(cls):
     #do something

类方法与成员方法不同的是,它需要传入参数cls,cls代表类。
 

复制代码 代码示例:
class Myclass(): 
    x='class'; 
    def __init__(self): 
        self.x='instance'; 
    @ staticmethod 
    def staticmd(): 
        print 'static method'; 
    @classmethod 
    def classmd(cls): 
        print cls.x; 
         
    def inst(self): 
        print self.x; 
 

类的实例可以访问静态方法,类方法,和成员方法
 

复制代码 代码示例:
>>>test=Myclass()
>>>test.staticmd()
static method
>>>test.classmd()
class
>>>test.inst()
instance

类可以访问静态方法和类方法,但不能访问成员方法
 

复制代码 代码示例:
>>>Myclass.staticmd()
static method
>>>Myclass.classmd()
class
>>>Myclass.inst()
TypeError: unbound method inst() must be called with Myclass instance as first argument(got nothing instead)

静态方法可以被继承,下面的derived1类继承Myclass类,derived1类也有了静态方法,derived1的实例可以直接调用staticmd()方法
 

复制代码 代码示例:
class derived1(Myclass):
         def__init__(self):
                   Myclass.__init__(self);
>>>d=derived1()
>>>d.staticmd()
static method

类方法也可以被继承,派生类的类的实例访问类方法,将会自动调用派生类版本的类方法,实现多态。
下面的derived2类继承自Myclass,derived2类可以调用类方法classmd(cls),此时cls指的是derived2.
 

复制代码 代码示例:
class derived2(Myclass):
         x="derived2";
         def__init__(self):
                   Myclass.__init__(self);
>>>d2=derived2()
>>>d2.classmd()
derived2