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

歡迎訪問 生活随笔!

生活随笔

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

python

python中class __str__怎么用_python中下划线的作用

發布時間:2024/9/18 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中class __str__怎么用_python中下划线的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習python的時候,我們經常碰到一些變量的變量名帶單下劃線/雙下劃線前綴或者后綴,然后會覺得這樣的命名風格很奇怪。除了變量命名風格外,也會遇到下劃線的表達式,也會讓人摸不著頭腦。今天我們就來看下,python中下劃線的作用。

忽略值

這是我們經常遇到的情況,比如調用某個函數,該函數會返回一組值,可是我們想要的返回值可能只是里面的某個,比如某函數除了返回關鍵屬性值外還會返回一個狀態碼,而程序里可能只要狀態碼,那么可以這樣

def

你可以把不需要的值賦值給下劃線_

解釋器里上個表達式的值

在解釋器中,這里的下劃線保存了上個表達式的值

>>> 1 + 2 3 >>> _ * 2 6

私有變量

python里并沒有關鍵字去定義類的成員方法和成員變量是私有或者公有的,不像Java里有private,public或者protected。python里做法是在給變量命名的時候添加一個下劃線前綴,然而你會發現即使做了這樣的命名,但是解釋器在運行程序時,如果外界直接調用對象私有成員是不會報錯的,所以這也被稱為弱私有,并非強制。但這個是一個約定俗稱的規定,雖然不受解釋器限制,但作為python程序員,一旦遇到這樣的情況,你心里就應該清楚,我不應該在外面直接去對實例成員做操作,請參閱PEP8。

class

執行u._name = "hello"并沒有報錯,執行結果:

hi hello

還有一種情況,你可以顯示的看到這個私有變量命名風格的效果,那就是在某模塊里定義一個私有變量后,在其他模塊用 from module import *導入到當前空間里是無法導入的。不過如果不用通配符*,具體指定對象名,私有變量依然可以被導入。

避免與python關鍵字或者內置對象名沖突

用后綴單下劃線可以避免與python關鍵字或者內置對象名沖突

比如 len_ = 10

Name mangling

網上很多文章說到雙下劃線前命名的變量才是私有變量,其實我覺得私有成員的聲明還是靠命名規則約定而且并非解釋器限制的單下劃線“_”。“__”只是營造出了“私有成員”的效果而已。簡單來說,python解釋器會把類中的以“__”前綴的變量名重新定義(name mangling), 該變量名被將替換為“_Classname__variable”,其中“Classname”是當前類名. 這樣也避免了從父類繼承的子類中出現的命名沖突。有點拗口,我們看個例子

class

運行結果

['_User__pwd', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_name', 'get_name', 'get_pwd']

你會發現,u對象成員變量__pwd被改名成了_User__pwd,當你從外面直接操作u.__pwd,當然會報沒有這個字段的錯誤,所以也就造成了私有成員的效果,其實本質它被改名了,你仍然可以通過u._User__pwd去訪問。

如果我們在寫一個類去繼承User,并在里面同樣定義成員變量__pwd,看看會發生什么

class

運行結果

['_User__pwd', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_name', 'get_name', 'get_pwd'] ['_Guest__pwd', '_User__pwd', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_name', 'get_name', 'get_pwd']

我們看到Guest對象的__pwd被重新改名叫_Guest__pwd。

Magic method

前綴后綴雙下劃線變量是python中的特殊成員,比如__init__,__new__,它們都有自己的特殊用處,所被稱為magic method,所以定義自己的變量時不要使用前綴后綴下劃線命名。

總結

以上是生活随笔為你收集整理的python中class __str__怎么用_python中下划线的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

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