装饰的功能@staticmethod和装饰的功能有什么区别@classmethod?
以下类方法有什么区别?
是一个是静态而另一个不是?
class Test(object):
def method_one(self):
print "Called method_one"
def method_two():
print "Called method_two"
a_test = Test()
a_test.method_one()
a_test.method_two()
Run Code Online (Sandbox Code Playgroud) 据我所知,Python中至少有3种方法具有不同的第一个参数:
selfcls这些经典方法在Test下面的类中实现,包括常用方法:
class Test():
def __init__(self):
pass
def instance_mthd(self):
print("Instance method.")
@classmethod
def class_mthd(cls):
print("Class method.")
@staticmethod
def static_mthd():
print("Static method.")
def unknown_mthd():
# No decoration --> instance method, but
# No self (or cls) --> static method, so ... (?)
print("Unknown method.")
Run Code Online (Sandbox Code Playgroud)
在Python 3中,unknown_mthd可以安全地调用它,但它在Python 2中引发了一个错误:
>>> t = Test()
>>> # Python 3
>>> t.instance_mthd()
>>> Test.class_mthd()
>>> t.static_mthd()
>>> Test.unknown_mthd()
Instance method.
Class …Run Code Online (Sandbox Code Playgroud)