<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 403, comments - 310, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    為什么Python中的self必須保留?

    Posted on 2008-11-15 19:58 ZelluX 閱讀(2546) 評論(2)  編輯  收藏 所屬分類: OOP

    Bruce Eckel的一篇日志建議把self從方法的參數列表中移除,并把它作為一個關鍵字使用。
    http://www.artima.com/weblogs/viewpost.jsp?thread=239003

    Guido的這篇日志說明了self作為參數是必不可少的。
    http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

    第一個原因是保證foo.meth(arg)和C.meth(foo, arg)這兩種方法調用的等價(foo是C的一個實例),關于后者可以參見Python Reference Manual 3.4.2.3。這個原因理論上的意義比較大。

    第二個原因在于通過self參數我們可以動態修改一個類的行為:

    # ?Define?an?empty?class:
    class ?C:
    pass
    ?
    # ?Define?a?global?function:
    def ?meth(myself,?arg):
    myself.val?
    = ?arg
    return ?myself.val
    ?
    # ?Poke?the?method?into?the?class:
    C.meth? = ?meth

    這樣類C就新增了一個meth方法,并且所有C的實例都可以通過c.meth(newval)調用這個方法。

    前面兩個原因或許都可以通過一些workaround使得不使用self參數時實現同樣的效果,但是在存在decorator的代碼中Bruce的方法存在致命的缺陷。(關于decorator的介紹可以參見http://www.python.org/dev/peps/pep-0318/)

    根據修飾對象,decorator分兩種,類方法和靜態方法。兩者在語法上沒有什么區別,但前者需要self參數,后者不需要。而Python在實 現上也沒有對這兩種方法加以區分。Bruce日志評論中有一些試圖解決decorator問題的方法,但這些方法都需要修改大量底層的實現。

    最后提到了另一種語法糖實現,新增一個名為classmethod的decorator,為每個方法加上一個self參數,當然這種實現也沒必要把self作為關鍵字使用了。不過我覺得這么做還不如每次寫類方法時手工加個self =_=



    評論

    # re: 為什么Python中的self必須保留?  回復  更多評論   

    2008-11-16 10:36 by 王軼凡
    贊一個,雖然是翻譯,不是原創 :)

    # re: 為什么Python中的self必須保留?  回復  更多評論   

    2008-11-16 13:06 by ZelluX
    @王軼凡
    哇,yifanw大牛@@
    主站蜘蛛池模板: 久久最新免费视频| jizz在线免费观看| 国产精品亚洲自在线播放页码 | 日韩视频免费在线| 国产一区视频在线免费观看| 国产亚洲成人久久| 亚洲AV无码一区二区乱子伦| 中文字幕亚洲综合久久| 亚洲91精品麻豆国产系列在线| 噜噜综合亚洲AV中文无码| 国产精品高清免费网站| 国产成人精品日本亚洲专区61 | 久久精品国产亚洲av瑜伽| 男女拍拍拍免费视频网站| 亚洲精品乱码久久久久久中文字幕 | 三级黄色免费观看| 成年女人视频网站免费m| 亚洲综合色视频在线观看| 久久精品亚洲AV久久久无码| 国内免费高清在线观看| 国产亚洲3p无码一区二区| 无码国产精品一区二区免费3p | 国产精品69白浆在线观看免费| 亚洲一区二区女搞男| 亚洲乱码日产精品一二三| 91精品免费不卡在线观看| 亚洲毛片网址在线观看中文字幕 | 国产精品亚洲一区二区三区久久 | 毛片在线看免费版| 成人精品综合免费视频| 免费观看黄网站在线播放| 婷婷国产偷v国产偷v亚洲| 亚洲午夜福利在线观看| 69天堂人成无码麻豆免费视频| 亚洲精品中文字幕无码蜜桃| 巨波霸乳在线永久免费视频| 亚洲国产精品乱码一区二区| 一级毛片免费毛片毛片| 一本久久综合亚洲鲁鲁五月天| 亚洲欧洲国产综合AV无码久久| 精品国产亚洲男女在线线电影|