以下类方法有什么区别?
是不是一个是静态的,另一个不是?
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()
在 Python 中,绑定 方法和 未绑定 方法是有区别的。
基本上,调用成员函数(如method_one),绑定函数
method_one
a_test.method_one()
被翻译成
Test.method_one(a_test)
即对未绑定方法的调用。因此,对您的版本的调用method_two将失败并显示TypeError
method_two
TypeError
>>> a_test = Test() >>> a_test.method_two() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: method_two() takes no arguments (1 given)
您可以使用装饰器更改方法的行为
class Test(object): def method_one(self): print "Called method_one" @staticmethod def method_two(): print "Called method two"
装饰器告诉内置的默认元类type(类的类,参见这个问题)不要为method_two.
type
现在,您可以在实例或类上直接调用静态方法:
>>> a_test = Test() >>> a_test.method_one() Called method_one >>> a_test.method_two() Called method_two >>> Test.method_two() Called method_two