2016年3月14日 星期一

[python] python 的 @classmethod @staticmethod 是什麼



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

沒有留言:

張貼留言