成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python面向對象之訪問控制

開發 后端
在Python進階記錄之基礎篇(十五)中,我們介紹了面向對象的基本概念以及Python中類和對象的基礎知識,需要重點掌握類的創建和對象的使用。今天我們繼續講一下Python中面向對象的相關知識點——屬性的訪問限制。

回顧

在Python進階記錄之基礎篇(十五)中,我們介紹了面向對象的基本概念以及Python中類和對象的基礎知識,需要重點掌握類的創建和對象的使用。今天我們繼續講一下Python中面向對象的相關知識點——屬性的訪問限制。

屬性的種類

通過之前的內容,我們知道,在定義一個類時,類內部可以有屬性和方法。我們仍然創建一個學生類Student。

Python面向對象之訪問控制

Student類

定義好一個類后,我們就可以在類的外部通過生成對象來使用對象的實例變量或調用成員方法來操作數據,從而隱藏類內部的代碼邏輯。但是,從類Student的定義來看,在類的外部,我們依然可以通過“對象.屬性”的方式對屬性進行任意修改。

Python面向對象之訪問控制

修改屬性

上述代碼中,我們在類的外部生成了一個對象student1,通過student1.name的方式將name修改為CCC,student1的name屬性就被修改了。然而,在面向對象編程中,我們往往不希望類內部的屬性被類外部的代碼直接修改和訪問,因此,私有變量的概念應運而生了。

私有變量顧名思義是私有的,類的私有變量只允許類內部代碼操作。Python中,私有變量就是在屬性開頭加兩個下劃線“__”。

Python面向對象之訪問控制

私有變量

可以看到,一旦將屬性設置為私有變量,如果我們試圖通過“對象.私有變量”來直接訪問的話,Python就會報錯了。

Python中,類的屬性可以分為公有變量和私有變量兩種,公有變量允許類的外部代碼通過“對象.屬性”的方式直接進行修改和獲取,而私有變量則不允許外部代碼直接訪問。其中,私有變量的命名以兩個下劃線“__”開頭。

需要注意的是,Python中變量名類似__xxx__的,也就是以雙下劃線開頭,并以雙下劃線結尾的變量不屬于私有變量,因此,我們不能使用類似__name__這樣的變量名作為私有變量。

在開發過程中,我們有時會碰到以一個下劃線開頭的實例變量名,比如_age。

Python面向對象之訪問控制

單下劃線開頭的實例變量

從上述代碼中我們可以看到,以一個下劃線開頭的實例變量是可以直接在類的外部代碼中通過“對象.屬性”的方式進行訪問的。但是,Python中有個約定俗成的規定,如果你看到別人的代碼中使用了這種以一個下劃線開頭的實例變量,那么你應該把它當做私有變量,不要直接在外部代碼中進行訪問。

私有變量的訪問

在定義類的時候,如果把屬性設置成私有變量,就不能在類的外部代碼中直接訪問了。上述代碼中,如果我們想要修改或獲取私有變量__name,我們可以通過給Student類創建成員方法get_name( )和set_name( )來對__name進行獲取和修改。

Python面向對象之訪問控制

成員方法set/get

有了get_name( )方法和set_name( )方法后,我們就可以通過對象調用成員方法來對私有變量__name進行訪問了。或許看到這里,你會有這樣的疑問:通過“對象.屬性”的方式也可以對屬性進行修改和獲取,為什么一定要設置成私有變量呢?除了封裝性上的要求外,使用成員方法還可以給修改設置限制。

Python面向對象之訪問控制

設置修改限制

上述代碼中,我們將學生的年齡限制在10~40之間。此時,若外部代碼試圖用一個不在此范圍內的年齡進行修改時,就會修改失敗。通過成員方法修改私有變量可以對傳入的參數進行校驗,避免傳入無效的參數。

如果你剛剛在設置私有變量__name的時候試過在外部代碼中使用“對象.__name = 值”的方式,你會發現Python并沒有報錯,甚至在賦值后可以使用“print(對象.__name)”獲取到__name的值。實際上,你用上述方式操作的__name并不是定義類時的那個私有變量__name,我們看一下以下代碼。

Python面向對象之訪問控制

對象綁定實例變量

可以看到,雖然通過“對象.屬性”的方式我們修改了一個叫__name的變量,但當我們調用get_name( )方法的時候,私有變量__name的值并沒有被修改。這是因為,Python允許對象綁定任意屬性,student1.__name操作的__name只是新綁定的一個屬性而已,它和定義類時定義的私有變量__name雖然名字相同,卻是兩個不同的變量。

那么私有變量是不是一定不能從外部訪問呢?在Python中,我們之所以不能直接訪問私有變量__name,是因為Python解釋器對外把__name變量改成了_Student__name。換句話說,其實我們是可以通過“_類名+私有變量名”的方式來直接訪問私有變量的。

Python面向對象之訪問控制

私有變量的變向直接訪問

雖然我們可以通過這種變相的方式直接訪問私有變量,但是在實際開發中,我們基本上是抵制這種寫法的,因為不同版本的Python解釋器可能會把私有變量改成不同的變量名。

總結

以上內容介紹了Python面向對象中關于屬性的訪問限制,當然我們對這個限制是要加引號的,因為Python中并沒有任何阻止機制對屬性的訪問進行限制,但是我們仍然需要自覺遵守這些約定俗成的規定,這也是面向對象編程所要求的。感謝大家的支持與關注,歡迎一起學習交流~ 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2010-07-15 13:56:24

面向對象面向過程

2023-01-10 09:38:09

面向對象系統

2011-07-05 14:42:46

java

2011-06-20 10:19:27

2021-07-09 13:54:31

零信任網絡安全網絡攻擊

2009-07-29 17:34:00

ibmdwWebSphereMQ

2009-09-27 14:12:12

面向對象設計單一職責

2019-03-26 10:50:22

Python面向對象編程語言

2023-01-10 09:06:17

2023-12-11 15:32:30

面向對象編程OOPpython

2010-02-02 13:22:06

Python面向對象

2010-03-05 14:44:36

Python繼承

2022-10-13 06:46:05

Dapr訪問控制策略

2023-09-27 23:28:28

Python編程

2013-03-11 09:23:22

Go語言面向對象

2010-02-02 13:15:26

Python類

2010-03-01 17:40:29

Python面向對象語

2010-03-01 17:47:53

Python語言

2023-04-26 00:15:32

python面向對象java

2020-10-07 15:15:41

Python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲v区 | 久99久视频 | 日韩不卡视频在线 | 毛片区| 国产精品毛片一区二区在线看 | 欧美精品一 | 国产精品久久久久久久久免费桃花 | 国产成人99久久亚洲综合精品 | 久久精品国产亚洲 | 毛片一区二区三区 | 国产高清久久 | 亚洲不卡在线观看 | 91一区二区三区在线观看 | 国产免费观看一级国产 | 亚洲欧美激情精品一区二区 | 国产成人精品a视频一区www | 精品国产欧美一区二区三区不卡 | 91久久爽久久爽爽久久片 | 丁香色婷婷 | 精品久久一区 | h视频在线播放 | 99精品国产一区二区三区 | 美国a级毛片免费视频 | 毛片免费看的 | 成人精品国产一区二区4080 | 欧美一级网站 | 午夜电影福利 | 中文字幕一区在线观看视频 | 久久美女视频 | 黄色毛片视频 | 中文字幕精品一区 | 五月婷婷丁香 | 国产精品视频一区二区三区四蜜臂 | 中文字幕免费 | 在线观看国产精品视频 | 欧美电影免费观看 | 久久精品视频亚洲 | 在线免费观看a级片 | a级大片免费观看 | 日韩一区二区福利 | 欧美在线a |