孤荷凌寒自學python第二十三天python類的封裝

孤荷凌寒自學python第二十三天python類的封裝python

 

(完整學習過程屏幕記錄視頻地址在文末,手寫筆記在文末)編程

1、從怎麼樣訪問類的內部代碼塊中定義的私有屬性提及安全

類中定義的私有屬性和私有方法是沒法被外部代碼塊訪問的,就算是類的繼承類也沒法訪問基類(父類)的私有對象。網絡

然而這卻並非絕對的說法,其實python語言靈活地留了一手,是能夠直接使用點語法訪問類的私有對象的!編程語言

測試:ide

class cup(object): #做爲基類函數

    __private='我是cup類的私有屬性'    #私有屬性學習

    public='我是cup類的公開屬性'測試

    one='我是cup類的第一屬性'日誌

    __two='我是cup類的第二屬性'  #私有屬性

 

    def __init__(self,one,two):

        self.one=one

        self.two=two

 

    def publicmethod(self,var1,var2):

        return "cup類的公開方法收到的參數是:" + var1 + "," + var2 + ',私用屬性__two=' + self.__two

    def __privatemethod(self):    #私有方法

        return '這是cup類中的私有方法打印的內容。'

    def __倒掉水(self):   #私有方法

        return '這是cup類執行了【倒掉水】的方法。'

 

class glass(object): #做爲基類

    __private='我是glass類的私有屬性'  #私有屬性

    public='我是glass類的公開屬性'

    one='我是glass類的第一屬性'

    __two='我是glass類的第二屬性'   #私有屬性

    three='我是glass類的第三屬性'

 

    def __init__(self,one,two,three):

        self.one=one

        self.two=two

        self.three=three

 

    def publicmethod(self,var1,var2):

        return "glass類的公開方法收到的參數是:" + var1 + "," + var2 + ',私用屬性__two=' + self.__two

    def __privatemethod(self):   #私有方法

        return '這是glass類中的私有方法打印的內容。'

    def __碎掉(self):   #私有方法

        return('glass類的實體化對象執行此方法後,碎掉了。')

 

class cupglass(cup,glass): #繼承自cup類和glass類而實現雙重繼承的子類

    pass

 

newobj=cupglass('玻璃','藍色') #由於定義cupglass類時,基類列表是有順序的,基類cup在列表最前面,優先級最高,所以以它的初始化方法函數 的參數個數爲準

newobj2=cupglass('陶瓷','白色')

str1=newobj._glass__碎掉()  #訪問類中私有對象的方法是:一根下劃線 加上 最初定義方法函數的類名 加上 私有對象名。

str2=newobj2._cup__倒掉水()

str3=newobj._glass__private

str4=newobj._cup__private

 

print(str1)

print(str2)

print(str3)

print(str4)

運行結果 :

glass類的實體化對象執行此方法後,碎掉了。

這是cup類執行了【倒掉水】的方法。

我是glass類的私有屬性

我是cup類的私有屬性

 

小結:

類中的私有對象其實也是能夠經過點語法直接訪問的,方法是:

實例化的對象名 . _最初定義私有對象的基類名私有對象名

測試中的例子:

str2=newobj2  . _cup__倒掉水()

【最初定義私有對象的基類名】的解釋:

實例化後的對象:newobj2 是 cupglass 類的實例化對象。

而cupclass 類 繼承自兩個 基類 cup  glass .

要調用的私有對象 __倒掉水()  本質上不是由 cupglass類親自 定義的,

而是cupglass 類從 cup 類中繼承而來,事實上由cup類親自定義的,

所以咱們在這兒寫的【最初定義私有對象的基類名】就只能寫:cup而不是寫 cupglass。

 

2、真正正確地訪問類中私有對象方法是經過類的封裝來實現

雖然第一點的方法可能訪問到類的私有對象,但其實並不安全,會對類的內部對象形成干擾,若是操做不當,類的實例化對象的穩定性就會受到影響。

所以 真正正確的作法是,經過在類的內部代碼塊中 封裝好對各個 私有對象的訪問方法。

關於封裝的測試:

class clsTwo(object):

    __width=0 #所有屬性都被定義爲了私有屬性。

    __wide=0

    __height=0

    __color=0

 

    #下面定義類的初始化方法

    def __init__(self,width,wide,height,color):

        self.__width=width

        self.__wide=wide

        self.__height=height

        self.__color=color

 

    #下面開始封裝方法函數的定義,經過下列封裝方法函數來間接取得和設置 類中 各個 私有屬性的值

    #獲得__height的封裝方法函數

    def getheight(self):

        return self.__height

 

    #設置__height值的封裝方法函數

    def setheight(self,height):

        self.__height=height

 

obj=clsTwo(100,80,60,'red') #獲得類clsTwo的一個實例化對象

intHeight=obj.getheight() #調用類的公開封裝方法來獲取__height

print(intHeight)

intHeight=intHeight+100

obj.setheight(intHeight)  #調用類的公開封裝方法來設置__height

intTemp=obj.getheight()

print(intTemp)

 

運行結果:

60

160

經過封裝後,外部代碼將不會直接訪問和操做類的實例化對象的屬性,所有經過類的公開方法來進行,提升了代碼安全性。

 

——————————

今天整理的學習筆記完成,最後例行說明下個人自學思路:

根據過去多年我自學各類編程語言的經歷,認爲只有真正體驗式,解決實際問題式的學習纔會有真正的效果,即讓學習實際發生。在2004年的時候我開始在一個鄉村小學自學電腦 並學習vb6編程語言,沒有學習同伴,也沒有高師在上,甚至電腦都是孤島(鄉村那時尚未網絡),有的只是一本舊書,在痛苦的自學摸索中,我找到適應本身零基礎的學習方法:首先是每讀書的一小節就做相應的手寫筆記,第二步就是上機測試每個筆記內容是否實現,其中會發現書中講的其實有出入或錯誤,第三步就是在上機測試以後,將筆記改成電子版,造成最終的修訂好的正確無誤的學習筆記 。

經過反覆嘗試錯誤,在那個沒有分享與交流的黑暗時期我摸黑學會了VB6,爾後接觸了其它語言,也曾聽過付費視頻課程,結果發現也許本身學歷果真過低,就算是零基礎的入門課程,其實也難以跟上進度,講師的教學多數出現對初學者的實際狀況並不瞭解的狀況,何況學習者的個體也存在差別呢?固然更可怕的是收費課程的價格每每是本身難以承受的。

因而個人全部編程學習都改成了自學,繼續本身的三步學習筆記法的學習之路。

固然自學的最大問題是會走那麼多的彎路,沒有導師直接輸入式的教學來得直接,好在網絡給咱們帶來無限搜索的機會,你們在網絡上的學習日誌帶給咱們共享交流的機會,而QQ羣等交流平臺、網絡社區的成立,咱們能夠一塊兒自學,互相批評交流,也能夠得到更有效,更自主的自學成果。

因而我以人生已過半的年齡,決定繼續個人編程自學之路,開始學習python,只但願與你們共同交流,一我的的獨行是可怕的,只有一羣人的共同前進纔是有但願的。

誠摯期待您的交流分享批評指點!歡迎聯繫我加入從零開始的自學聯盟。

這個時代互聯網成爲了一種基礎設施的存在,因而原本在孤獨學習之路上的咱們變得再也不孤獨,由於網絡就是一個新的客廳,咱們時刻均可以進行沙龍活動。

很是樂意能與你們一塊兒交流本身自學心得和發現,更但願你們可以對我學習過程當中的錯誤給予指點——是的,這樣我就能有許多免費的高師了——這也是分享時代,社區時代帶來的好福利,我相信你們會的,是吧!

 

根據徹底共享的精神,開源互助的理念,個人我的自學錄製過程是所有按4K高清視頻錄製的,從手寫筆記到驗證手寫筆記的上機操做過程全程錄製,但由於4K高清文件太大均超過5G以上,因此沒法上傳至網絡,若有須要可聯繫我QQ578652607對傳,樂意分享。上傳分享到百度網盤的只是壓縮後的720P的視頻。

 

個人學習過程錄像百度盤地址分享以下:(清晰度:1280x720)

連接:https://pan.baidu.com/s/1kv77Tjel4PtfFScYe2qgXw  密碼:2zc5

 

Bilibili:

https://www.bilibili.com/video/av36211235/

 

喜馬拉雅語音筆記:

https://www.ximalaya.com/keji/19103006/140726943

 

 

相關文章
相關標籤/搜索