1、 場景定義
私有屬性
是指在Python 的物件導向開發過程中,物件的某些屬性只想在對象的內部被使用,但不想在外部被存取到這些屬性。
即:私有屬性是物件不願意公開的屬性。
私有方法
是指在Python 的物件導向開發過程中,物件的某些方法或稱為函數只想在物件的內部被使用,但不想在外部被存取到這些方法或函數。
即:私有方法是物件不願意公開的方法或函數。
2、語法定義
在Python 中定義私有屬性和私有方法的語法如下:
class Staff: def __init__(self, s_name, s_salary): self.s_name = s_name self.__salary = s_salary def __secret(self): print("%s 的工资是 %d" % (self.s_name, self.__salary))
(1). __salary是以兩個底線開頭來定義的私有屬性。
(2). __secret(self)是以兩個底線開頭來定義的私有方法。
3、 呼叫分析
(1). 在__init__的物件初始化方法中,以兩個底線開頭定義的__salary屬性就是私有屬性。
現在在物件的外部來呼叫一下__salary屬性,看看是否能正常存取該私有屬性。
從上圖執行結果可以看出,第11行,即在物件外部存取物件的私有屬性__salary 時,提示AttributeError 錯誤,Staff 物件zhangsan 沒有屬性__salary。
為了證明 Staff 類別物件確實是有__salary 這個實例屬性的,只是因為在物件外部不能存取私有屬性。
我把 self.__salary 修改為:self.salary,__secret(self)方法對self.__salary屬性的引用,做對應的修改,看如下圖所示的運行結果。
可以從執行結果看出,這個非私有屬性在外部的呼叫是正常的,沒有提示 AttributeError 錯誤。
(2). 在 __secret(self) 實例方法中,以兩個底線開頭定義的__secret(self)方法就是私有方法。
和上面測試流程一樣,先在物件的外部來呼叫私有方法__secret(self),看是否能正常呼叫該私有方法。
從上圖執行結果可以看出,第11行,即在物件外部存取物件的私有方法__secret(self) 時,提示AttributeError 錯誤,Staff 對象zhangsan 沒有__secret 方法。
為了證明 Staff 類別物件是有__secret(self)這個實例方法的,只是因為在物件外部不能存取私有方法。
我把 __secret(self) 方法修改為:secret(self),其他程式碼不變,看如下圖的運行結果。
可以從執行結果看出,這種非私有方法在外部的呼叫是正常的,沒有提示 AttributeError 錯誤。
(3). 從下圖可以看出,在物件內部私有方法與私有屬性是可以被呼叫的。
如圖中的 work 方法呼叫了私有方法__secret(self),而私有方法__secret(self)呼叫了私有屬性__salary。
在物件外部使用 Staff 類別物件 zhangsan 來呼叫 work 方法,可以間接存取到物件的私有屬性和私有方法。
從控制台輸出結果來看 work 方法能正常存取到物件內部定義的私有屬性和私有方法。
4、 Python偽私有屬性和私有方法
在Python 中,並沒有真正意義上的私有,因為Python 內部在為屬性、方法命名時,對名稱做了一些特殊處理,使得外界無法存取對應的屬性和方法。
以私有屬性與私有方法為例,Python內部處理方式為:
(1). 屬性: __salary,經過處理後的屬性名稱為:_Staff__salary(_類別名稱__屬性名稱)
(2). 方法: __secret,經過處理後的方法名稱為:_Staff__secret(_類別名稱__方法名稱)
知道了Python 內部對於私有屬性和私有方法的處理,現在使用這種處理後的命名方式來在物件外部存取私有屬性和私有方法,看看是否能存取正常。
class Staff: def __init__(self, s_name, s_salary): self.s_name = s_name self.__salary = s_salary def __secret(self): return "%s的工资是 %d" % (self.s_name, self.__salary) zhangsan = Staff("张三", 10000) print(zhangsan._Staff__salary) print(zhangsan._Staff__secret())
運行結果如下圖所示
控制台沒有拋任何的例外,之前的提示 AttributeError 錯誤也沒有了。
這個例子證明了Python 是沒有真正意義上的私有的,當知道了其內部處理方式後,依然可以使用_類名__屬性名(方法名)的方法來在對像外部訪問到物件內部定義的私有屬性和私有方法。
但這種方式在日常工作中是不建議使用的,既然在物件內部定義屬性和方法時,就宣告了其為私有的,呼叫方就需要遵守其規則。
這裡只是想透過這個小例子來說明 Python 並無真正意義上的私有。
以上是聊聊Python私有屬性與私有方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

使用NumPy創建多維數組可以通過以下步驟實現:1)使用numpy.array()函數創建數組,例如np.array([[1,2,3],[4,5,6]])創建2D數組;2)使用np.zeros(),np.ones(),np.random.random()等函數創建特定值填充的數組;3)理解數組的shape和size屬性,確保子數組長度一致,避免錯誤;4)使用np.reshape()函數改變數組形狀;5)注意內存使用,確保代碼清晰高效。

播放innumpyisamethodtoperformoperationsonArraySofDifferentsHapesbyAutapityallate AligningThem.itSimplifififiesCode,增強可讀性,和Boostsperformance.Shere'shore'showitworks:1)較小的ArraySaraySaraysAraySaraySaraySaraySarePaddedDedWiteWithOnestOmatchDimentions.2)

forpythondataTastorage,choselistsforflexibilityWithMixedDatatypes,array.ArrayFormeMory-effficityHomogeneousnumericalData,andnumpyArraysForAdvancedNumericalComputing.listsareversareversareversareversArversatilebutlessEbutlesseftlesseftlesseftlessforefforefforefforefforefforefforefforefforefforlargenumerdataSets; arrayoffray.array.array.array.array.array.ersersamiddreddregro

Pythonlistsarebetterthanarraysformanagingdiversedatatypes.1)Listscanholdelementsofdifferenttypes,2)theyaredynamic,allowingeasyadditionsandremovals,3)theyofferintuitiveoperationslikeslicing,but4)theyarelessmemory-efficientandslowerforlargedatasets.

toAccesselementsInapyThonArray,useIndIndexing:my_array [2] accessEsthethEthErlement,returning.3.pythonosezero opitedEndexing.1)usepositiveandnegativeIndexing:my_list [0] fortefirstElment,fortefirstelement,my_list,my_list [-1] fornelast.2] forselast.2)

文章討論了由於語法歧義而導致的Python中元組理解的不可能。建議使用tuple()與發電機表達式使用tuple()有效地創建元組。 (159個字符)

本文解釋了Python中的模塊和包裝,它們的差異和用法。模塊是單個文件,而軟件包是帶有__init__.py文件的目錄,在層次上組織相關模塊。

文章討論了Python中的Docstrings,其用法和收益。主要問題:Docstrings對於代碼文檔和可訪問性的重要性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3漢化版
中文版,非常好用

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具