面相对象程序设计中,类方法和静态方法是经常用到的两个术语。
逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。
在C++中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆。
而在Python中,方法分为三类:实例方法、类方法、静态方法。代码如下:
classTest(object): defInstanceFun(self): print("InstanceFun"); print(self); @classmethod defClassFun(cls): print("ClassFun"); print(cls); @staticmethod defStaticFun(): print("StaticFun"); t=Test(); t.InstanceFun(); #输出InstanceFun,打印对象内存地址“<__main__.Testobjectat0x0293DCF0>” Test.ClassFun();#输出ClassFun,打印类位置<class'__main__.Test'> Test.StaticFun();#输出StaticFun t.StaticFun();#输出StaticFun t.ClassFun();#输出ClassFun,打印类位置<class'__main__.Test'> Test.InstanceFun();#错误,TypeError:unboundmethodinstanceFun()mustbecalledwithTest instanceasfirstargument Test.InstanceFun(t);#输出InstanceFun,打印对象内存地址“<__main__.Testobjectat0x0293DCF0>” t.ClassFun(Test);#错误classFun()takesexactly1argument(2given)
可以看到,在PYTHON中,两种方法的主要区别在于参数。实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls。
静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容