python 的 @staticmethod 與 @classmethod 一直都是一個容易令人混淆的觀念。
舉個例子來說
#coding=python
class A(object):
def foo(self,x):
print 'this %s %s ' % (self,x)
@classmethod
def class_foo(cls,x)
print 'this class_foo %s %s ' % (cls,x)
@staticmethod
def static_foo(x):
print 'this static_foo %s %s ' % (x)
a=A()
a.foo(1) <---- v
a.class_foo(1) <---- v 自動帶入 a 當做 cls (self)
這個地方無法使用 A.foo(1) 會發生 TypeError
A.class_foo(1) 也可以呼叫
--------
而 staticmethod
不管使用
a.static_foo(1)
A.static_foo(1)
都是一樣的
装饰器@staticmethod和@classmethod有什么区别? | Stackoverflow about Python
Python 中的 classmethod 和 staticmethod 有什么具体用途? - Python - 知乎
https://www.zhihu.com/question/20021164
沒有留言:
張貼留言