Python中纠结处之其一—— 静态方法、类方法
生活随笔
收集整理的這篇文章主要介紹了
Python中纠结处之其一—— 静态方法、类方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉身投入Python有一周左右的日子了。這一周不能算是很仔細的去研究它,用比喻的話,還在學習騎車的階段,未及拆車和造車這樣高深。
但此時就有了讓我產生糾結之處。查閱了一些已對這點做比較的博文,對其有所領悟。其實,問題是先來自于Python具有魅力的Decorator。其內置的三個Decorator讓我有些許不解。
@staticmethod@classmethod
@proptey
本身來自于Java的先入為主,讓我對類方法和靜態方法沒了區別的概念。但在前人的博文中找到一個例子,讓我略有了些領悟
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)
a.class_foo(1)
A.class_foo(1)
a.static_foo(1)
A.static_foo(1)
輸出的結果為
executing foo(<__main__.A object at 0x004E0730>,1)executing class_foo(<class '__main__.A'>,1)
executing class_foo(<class '__main__.A'>,1)
executing static_foo(1)
executing static_foo(1)
首先,實例方法,很清楚,打印了該實例化的對象的信息(在內存中的地址)
然后是類方法,cls這個參數打印出的是 類A這個對象(Python中任何都是對象),不管是否是實例化的調用
最后是靜態方法,與調用也無關,并且這個方法不依賴任何對象。
一些粗淺的認識:
- 實例化以后,類方法和靜態方法也可以使用(似乎是廢話)
- 類方法和靜態方法不能訪問需要實例化的屬性(似乎又是……)
- 實例方法是由一個類實例化后產生的,所以能訪問實例化后的對象的屬性
- 因為在Python中,類也是對象,所以,類方法相對靜態方法的一大特點是可以訪問類具有的屬性,但是靜態方法不行 !
? ? ? 似乎就是這些領悟,后面遇到問題再來更新吧
轉載于:https://www.cnblogs.com/artoruis/archive/2011/09/13/static_class_method.html
總結
以上是生活随笔為你收集整理的Python中纠结处之其一—— 静态方法、类方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight入门系列]使用MV
- 下一篇: 不能创建对象: 'CDONTS.Newm