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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

关于Python中的self

發(fā)布時間:2025/5/22 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Python中的self 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

雖然我現(xiàn)在寫過一些Python代碼,但實(shí)際上幾乎還沒用過Class,而且一直覺得一個很別扭的事情是,Class中的函數(shù)都要寫個參數(shù)self,雖然實(shí)例化調(diào)用的時候不需要。

當(dāng)然,一開始就知道Python這樣設(shè)計(jì)應(yīng)該有它的理由,具體是什么也沒去考慮。

今天看到一個這樣的說法:

源地址:http://www.douban.com/group/topic/19376685/

我解釋一下python的類方法為什么要寫一個self參數(shù)

來自:?巴特富萊韋杭普(Butterfly Wet-hamp)?2011-04-26 23:18:19

這是對前面一個php程序員問python方法為什么要手寫一個self的回答,當(dāng)時那個帖非常的熱鬧,但是下面沒有一個回復(fù)講到要點(diǎn),等我有空,已經(jīng)找不到原帖了。?

原因有多重。首先是python中幾乎所有的東西的一級對象(一級對象的定義:http://en.wikipedia.org/wiki/First-class_object),method也不例外,比如你寫一個:?
class X:?
 def f(self, a, b):?
  ...?
那么可以這樣引用f:?
X.__dict__['f']?
或者?
X.f.__func__?

現(xiàn)在問題來了,得到f以后怎么調(diào)用?f是一個方法,方法必須作用于對象。如果x是一個X對象,我們可以x.f(...),但是如果是以上面的方式得到的f呢?怎么f讓作用于某個對象?最直觀的方法就是和參數(shù)一起傳遞進(jìn)去。?

當(dāng)然的限不同的設(shè)計(jì)也可以滿足上面制。比如不要手寫的self參數(shù),增加this關(guān)鍵字,增加一個調(diào)用f個格式。這樣的設(shè)計(jì)和pep20第二條不符合。?

為理解python的self,不妨對比一下ruby和javascript。ruby的方式是方法不是一級對象,所以繞過了這個問題。javascript沒有類,方法在調(diào)用時this會綁定到方法所屬的對象,函數(shù)調(diào)用時this綁定到window,函數(shù)做構(gòu)造器調(diào)用時this綁定到新對象。這么多規(guī)則,比Python復(fù)雜。?

11人?喜歡?喜歡 回應(yīng)?推薦?喜歡只看樓主
  • 狼.敬畏生命?(wolf python london)?2011-04-27 08:38:50

    說下我的理解:?

    我在學(xué)習(xí)python的時候,也發(fā)現(xiàn)一直寫著self很別扭,在c++中,this指針是隱式的,除非不得以的時候,,比如傳進(jìn)來的參數(shù)和類的成員變量的名字相同,或者要返回當(dāng)前對象。 而python的self是顯示的。而且this指針基本上不用在函數(shù)頭里面。?

    python是動態(tài)語言,設(shè)計(jì)出來的類和靜態(tài)語言的格式不同,首先c++在類的定義(聲明)時,會指定類的成員變量,比如在private:里。但是Python不行,它沒法顯式的說 哪個屬性是自己的,而且屬性還可以動態(tài)的增加,此時,一個解決方案出來了,增加self,通過self.訪問的就可以做為類的屬性。至于類的方法為什么要顯式的寫上self(我感覺,完全可以由解釋器隱式添加上去),估計(jì)就是python的哲學(xué)導(dǎo)致的:Explicit is better than implicit.?

  • zizi?(努力賺錢中)?2011-04-27 09:20:05

    個人理解:?
    除了前兩種形式外還有第三種形式X.f,這個返回的和前兩個不同。?
    其實(shí)你寫不寫self或者其他什么對于python來說都無所謂,對于python來說,方法就分兩種一種是綁定的,一種是不綁定。對于綁定的方法來說,python就會把他綁定的對象作為第一個參數(shù)傳給這個對象。self僅僅是提醒你這個方法會被綁定到實(shí)例上而已。?

    同時這樣做還有個好處就是兼容python的C/API部分。Python本身是用C寫成的,在C中實(shí)現(xiàn)類似面向機(jī)制都是這么寫的:?
    SSL_connect(SSL *ssl, ARG *arg1)?
    再看看Python C API的OO部分?
    int PyObject_Print(PyObject *o, FILE *fp, int flags)?

    所以我大膽猜測self的機(jī)制是從C繼承而來的。

  • zizi?(努力賺錢中)?2011-04-27 09:26:38

    PS:對于你說ruby中方法不是第一級對象這個事情能否解釋一下??
    我RUBY用的不多,但是我印象中ruby的方法應(yīng)該能滿足first class的定義。

  • 李保銀?2011-04-27 10:21:11

    self是類方法的一個位置參數(shù),它就是類的實(shí)例對象自己,當(dāng)實(shí)例調(diào)用方法時:?
    instance = X()?
    instance.f('a', 'b')?
    等同于:?
    X.f(instance, 'a', 'b')?
    第一個參數(shù)是實(shí)例自己。

  • bachue?2013-05-16 15:58:28

    "當(dāng)然的限不同的設(shè)計(jì)也可以滿足上面制。比如不要手寫的self參數(shù),增加this關(guān)鍵字,增加一個調(diào)用f個格式。這樣的設(shè)計(jì)和pep20第二條不符合。"?
    不能茍同 如果真的是“Explicit is better than implicit.”,為何x.f()中的x是以implicit的方法送進(jìn)f的?為何不寫成f(x)?為何Python不去除面向?qū)ο笠酝耆珜?shí)現(xiàn)“Explicit is better than implicit.”?

  • alinwawa?2013-09-08 05:25:57

    狼.敬畏生命,寫得最好。確實(shí)python犧牲了隱式的簡潔,但是換來了極大的靈活性,比如隨意添加對象屬性。這個比c++方便太多倍了。

  • 蘇打?2013-09-08 08:59:36

    說下我的理解: 我在學(xué)習(xí)python的時候,也發(fā)現(xiàn)一直寫著self很別扭,在c++中,this指針是隱式?...?狼.敬畏生命

    靠IDE能否省掉這些重復(fù)?

  • 精密空調(diào)?2013-09-11 12:01:24

    習(xí)慣上,方法的第一個參數(shù)命名為 self。這僅僅是一個約定:對Python而言,self 絕對沒有任何特殊含義。(然而要注意的是,如果不遵守這個約定,別的Python程序員閱讀你的代碼時會有不便,而且有些類瀏覽程序也是遵循此約定開發(fā)的。)

?雖然基本上算是理解了Python為什么要加這個self。但是!!!我必須想明白這個但是!!!我之所以喜歡Python,就是因?yàn)樗暮啙?#xff0c;我之前的理解是:

用最少的工作做最多的事情

繁瑣的工作沒必要做

出來的結(jié)果跟想象的結(jié)果驚人的一致

正因?yàn)檫@樣,所以,我實(shí)在是無法理解這個self,無論從哪方面考慮,它都是多余的,既然連{}這種東西都能省,為什么一個self不能省?!縱使PEP 20哲學(xué)說清晰好過模糊,但為什么還支持帶缺省值的參數(shù),為什么不像C語言那樣不能省略?

所以,無論是從Python設(shè)計(jì)哲學(xué)還是設(shè)計(jì)技術(shù)細(xì)節(jié)來考慮,這個self真的是一個很奇怪的東西,再怎么說,前面已經(jīng)有個class了,這一段就是類啊!!!

轉(zhuǎn)載于:https://www.cnblogs.com/fwindpeak/p/3341787.html

總結(jié)

以上是生活随笔為你收集整理的关于Python中的self的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。