日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

对于python中的self,cls,decorator的理解

發布時間:2025/7/14 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对于python中的self,cls,decorator的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. self, cls 不是關鍵字

在python里面,self, cls 不是關鍵字,完全可以使用自己寫的任意變量代替實現一樣的效果

代碼1

Python代碼
Code:

class MyTest:
myname = 'peter'
def sayhello(hello):
print "say hello to %s" % hello.myname

if __name__ == "__main__":
MyTest().sayhello()

class MyTest: myname = 'peter' def sayhello(hello): print "say hello to %s" % hello.myname if __name__ == "__main__": MyTest().sayhello()


代碼1中, 用hello代替掉了self, 得到的是一樣的效果,也可以替換成java中常用的this.



結論 : self和cls只是python中約定的寫法,本質上只是一個函數參數而已,沒有特別含義。

任何對象調用方法都會把把自己作為該方法中的第一個參數,傳遞到函數中。(因為在python中萬物都是對象,所以當我們使用Class.method()的時候,實際上的第一個參數是我們約定的cls)



2. 類的定義可以動態修改

代碼2

Code:

class MyTest:
myname = 'peter'
def sayhello(self):
print "say hello to %s" % self.myname

if __name__ == "__main__":
MyTest.myname = 'hone'
MyTest.sayhello = lambda self,name: "I want say hello to %s" % name
MyTest.saygoodbye = lambda self,name: "I do not want say goodbye to %s" % name
print MyTest().sayhello(MyTest.myname)
print MyTest().saygoodbye(MyTest.myname)

class MyTest: myname = 'peter' def sayhello(self): print "say hello to %s" % self.myname if __name__ == "__main__": MyTest.myname = 'hone' MyTest.sayhello = lambda self,name: "I want say hello to %s" % name MyTest.saygoodbye = lambda self,name: "I do not want say goodbye to %s" % name print MyTest().sayhello(MyTest.myname) print MyTest().saygoodbye(MyTest.myname)


這里修改了MyTest類中的變量和函數定義, 實例化的instance有了不同的行為特征。


3. decorator

decorator是一個函數, 接收一個函數作為參數, 返回值是一個函數


代碼3

Python代碼
Code:

def enhanced(meth):
def new(self, y):
print "I am enhanced"
return meth(self, y)
return new
class C:
def bar(self, x):
print "some method says:", x
bar = enhanced(bar)

def enhanced(meth): def new(self, y): print "I am enhanced" return meth(self, y) return new class C: def bar(self, x): print "some method says:", x bar = enhanced(bar)


上面是一個比較典型的應用


以常用的@classmethod為例

正常的使用方法是



代碼4

Python代碼
Code:

class C:
@classmethod
def foo(cls, y):
print "classmethod", cls, y

class C: @classmethod def foo(cls, y): print "classmethod", cls, y


這里有個疑惑的地方,不是很明白: 如果一個方法沒有使用@classmethod, 那么用Class.method()的方式,是會報錯的。但是@classmethod是個decorator, 那么它返回的也是一個函數,為什么這樣就可以直接被Class調用了呢?

from:http://www.cnblogs.com/eplussoft/

總結

以上是生活随笔為你收集整理的对于python中的self,cls,decorator的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美大白屁股 | 交视频在线播放 | jizz国产在线 | 男人操女人的视频 | 色综合图片 | 欧美性视频在线播放 | 日韩av免费在线播放 | 永久av在线免费观看 | 久久久久久久女国产乱让韩 | 日本人体视频 | 国产精品婷婷午夜在线观看 | 色综合天天综合网国产成人网 | 欧美大片高清免费观看 | 有码在线播放 | 国产大片中文字幕在线观看 | 欧美与黑人午夜性猛交久久久 | 中文字幕一区二区在线视频 | 亚洲综合在线五月 | 国产人妖在线视频 | 天堂新版8中文在线8 | 日本三级吹潮 | 国产视频二| 亚洲 在线| 国产女女 | 免费成人深夜在线观看 | 午夜少妇av| 成年人在线播放视频 | 亚洲一区欧美一区 | 神马久久久久 | jizz中国少妇高潮出水 | 韩国一区二区在线观看 | 午夜免费看视频 | 日韩中文视频 | 国产女主播av| 欧美一级性生活视频 | 法国空姐在线观看完整版 | 毛片毛片毛片毛片 | 国产第一页av | 久久这里只有精品9 | 精品国产91乱码一区二区三区 | av网站免费在线播放 | 爱豆国产剧免费观看大全剧集 | 激情高潮呻吟抽搐喷水 | 国产成人综合在线视频 | 精品国产中文字幕 | av导航网址 | 97人人爽人人 | 狠狠插狠狠操 | 国产精品一区二区黑人巨大 | 国产激情图片 | 亚洲看片 | 亚洲第一成肉网 | 欧美中文日韩 | 秋霞午夜鲁丝一区二区老狼 | 精品黑人一区二区三区国语馆 | xxxxⅹxxxhd日本8hd | 亚洲一区二区三区乱码 | 久久精品www人人爽人人 | 伊人久久av | 二三区视频 | 中国国产bdsm紧缚捆绑 | 国产色爽 | 欧美一级鲁丝片 | 精品国产一区二区三区四区精华 | 偷拍一区二区三区 | 色资源在线 | 日韩一级二级视频 | 91精品视频免费 | 中文字幕一区二区三区人妻不卡 | 中文字幕日韩三级片 | 欧美日韩在线不卡 | 国产后入又长又硬 | 伊人91视频 | 久久久久黄色片 | 久操欧美 | 欧美黄色片网站 | 亚洲中文字幕无码一区二区三区 | 婷婷综合另类小说色区 | 日日骚影院| 日本一区二区三区久久久久 | 黄色av免费在线观看 | 91丨九色丨黑人外教 | 亚洲国产精品无码久久久 | 五月天激情婷婷 | 69av视频| avtt中文字幕| 凹凸福利视频 | 性猛交富婆╳xxx乱大交麻豆 | 免费看欧美黄色片 | 亚洲成人黄色在线 | 99成人在线视频 | 国产一区二区视频在线播放 | 国产视频一区二区三区在线播放 | 国产视频在线观看网站 | 韩国av一区二区 | 亚洲v日本 | 久久国产视频网站 | 污黄网站在线观看 | 亚洲av无码一区二区三区性色 |