基于python中staticmethod和classmethod的区别(详解)
(编辑:jimmy 日期: 2025/11/13 浏览:3 次 )
例子
class A(object):
def foo(self,x):
print "executing foo(%s,%s)"%(self,x)
@classmethod
def class_foo(cls,x):
print "executing class_foo(%s,%s)"%(cls,x)
@staticmethod
def static_foo(x):
print "executing static_foo(%s)"%x
a=A()
上述类有三个函数,使用如下:
a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)
-----------------------------------------------------------------
a.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
A.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
-----------------------------------------------------------------
a.static_foo(1)
# executing static_foo(1)
A.static_foo('hi')
# executing static_foo(hi)
区别
"htmlcode">
``` print(a.foo) # <bound method A.foo of <main.A object at 0xb7d52f0c print(a.class_foo) # <bound method type.class_foo of <class 'main.A' print A.class_foo <bound method classobj.class_foo of > print(a.static_foo) # print(A.static_foo) # ```
作用
• 使用场景:classmethod在一些工厂类的情况下使用较多,也就是说OOP里继承的时候使用,staticmethod一般情况下可以替换为外部的函数,后者继承的时候不可更改,和C++/JAVA中的静态方法很相似
• 有利于组织代码,同时有利于命名空间的整洁
以上这篇基于python中staticmethod和classmethod的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
下一篇:python使用pyqt写带界面工具的示例代码