最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python封裝原理與實現(xiàn)方法詳解

 更新時間:2018年08月28日 08:44:29   作者:—super—  
這篇文章主要介紹了Python封裝原理與實現(xiàn)方法,結合實例形式較為詳細的分析了Python封裝的概念、原理、實現(xiàn)方法及相關操作注意事項,需要的朋友可以參考下

本文實例講述了Python封裝原理與實現(xiàn)方法。分享給大家供大家參考,具體如下:

【封裝】

 隱藏對象的屬性和實現(xiàn)細節(jié),僅對外提供公共訪問方式。

【好處】

1. 將變化隔離;

2. 便于使用;

3. 提高復用性;

4. 提高安全性;

【封裝原則】

1. 將不需要對外提供的內容都隱藏起來;

2. 把屬性都隱藏,提供公共方法對其訪問。

私有變量和私有方法

在python中用雙下劃線開頭的方式將屬性隱藏起來(設置成私有的)

私有變量

#其實這僅僅這是一種變形操作
#類中所有雙下劃線開頭的名稱如__x都會自動變形成:_類名__x的形式:
class A:
  __N=0 #類的數(shù)據(jù)屬性就應該是共享的,但是語法上是可以把類的數(shù)據(jù)屬性設置成私有的如__N,會變形為_A__N
  def __init__(self):
    self.__X=10 #變形為self._A__X
  def __foo(self): #變形為_A__foo
    print('from A')
  def bar(self):
    self.__foo() #只有在類內部才可以通過__foo的形式訪問到.
#A._A__N是可以訪問到的,即這種操作并不是嚴格意義上的限制外部訪問,僅僅只是一種語法意義上的變形

這種自動變形的特點:

1.類中定義的__x只能在內部使用,如self.__x,引用的就是變形的結果。

2.這種變形其實正是針對外部的變形,在外部是無法通過__x這個名字訪問到的。

3.在子類定義的__x不會覆蓋在父類定義的__x,因為子類中變形成了:_子類名__x,而父類中變形成了:_父類名__x,即雙下滑線開頭的屬性在繼承給子類時,子類是無法覆蓋的。

這種變形需要注意的問題是:

1.這種機制也并沒有真正意義上限制我們從外部直接訪問屬性,知道了類名和屬性名就可以拼出名字:_類名__屬性,然后就可以訪問了,如a._A__N

2.變形的過程只在類的定義是發(fā)生一次,在定義后的賦值操作,不會變形

私有方法

#正常情況
>>> class A:
...   def fa(self):
...     print('from A')
...   def test(self):
...     self.fa()
...
>>> class B(A):
...   def fa(self):
...     print('from B')
...
>>> b=B()
>>> b.test()
from B

#把fa定義成私有的,即__fa
>>> class A:
...   def __fa(self): #在定義時就變形為_A__fa
...     print('from A')
...   def test(self):
...     self.__fa() #只會與自己所在的類為準,即調用_A__fa
...
>>> class B(A):
...   def __fa(self):
...     print('from B')
...
>>> b=B()
>>> b.test()
from A

封裝與擴展性

封裝在于明確區(qū)分內外,使得類實現(xiàn)者可以修改封裝內的東西而不影響外部調用者的代碼;而外部使用用者只知道一個接口(函數(shù)),只要接口(函數(shù))名、參數(shù)不變,使用者的代碼永遠無需改變。這就提供一個良好的合作基礎——或者說,只要接口這個基礎約定不變,則代碼改變不足為慮。

#類的設計者
class Room:
  def __init__(self,name,owner,width,length,high):
    self.name=name
    self.owner=owner
    self.__width=width
    self.__length=length
    self.__high=high
  def tell_area(self): #對外提供的接口,隱藏了內部的實現(xiàn)細節(jié),此時我們想求的是面積
    return self.__width * self.__length

#使用者
>>> r1=Room('臥室','egon',20,20,20)
>>> r1.tell_area() #使用者調用接口tell_area
400

#類的設計者,輕松的擴展了功能,而類的使用者完全不需要改變自己的代碼
class Room:
  def __init__(self,name,owner,width,length,high):
    self.name=name
    self.owner=owner
    self.__width=width
    self.__length=length
    self.__high=high
  def tell_area(self): #對外提供的接口,隱藏內部實現(xiàn),此時我們想求的是體積,內部邏輯變了,只需求修該下列一行就可以很簡答的實現(xiàn),而且外部調用感知不到,仍然使用該方法,但是功能已經變了
    return self.__width * self.__length * self.__high
#對于仍然在使用tell_area接口的人來說,根本無需改動自己的代碼,就可以用上新功能
>>> r1.tell_area()
400

property屬性

property是一種特殊的屬性,訪問它時會執(zhí)行一段功能(函數(shù))然后返回值

@property

@obj.setter

@obj.deleter

為什么要用property

將一個類的函數(shù)定義成特性以后,對象再去使用的時候obj.name,根本無法察覺自己的name是執(zhí)行了一個函數(shù)然后計算出來的,這種特性的使用方式遵循了統(tǒng)一訪問的原則

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 基于Python實現(xiàn)簡易的植物識別小系統(tǒng)

    基于Python實現(xiàn)簡易的植物識別小系統(tǒng)

    這篇文章主要介紹了利用Python實現(xiàn)一個簡易的植物識別系統(tǒng),文中的示例代碼簡潔易懂,對我們學習Python有一定的幫助,需要的小伙伴可以參考一下
    2021-12-12
  • 在Pycharm terminal中字體大小設置的方法

    在Pycharm terminal中字體大小設置的方法

    今天小編就為大家分享一篇在Pycharm terminal中字體大小設置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django中模版的子目錄與include標簽的使用方法

    Django中模版的子目錄與include標簽的使用方法

    這篇文章主要介紹了Django中模版的子目錄與include標簽的使用方法,有利于Python的Django框架的模版布局,需要的朋友可以參考下
    2015-07-07
  • 詳解Python中pyautogui庫的最全使用方法

    詳解Python中pyautogui庫的最全使用方法

    這篇文章主要介紹了詳解Python中pyautogui庫的最全使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python?excel合并居中值相同的單元格實例代碼

    Python?excel合并居中值相同的單元格實例代碼

    在工作中遇到了合并具有相同條件的單元格合并的問題,下面這篇文章主要給大家介紹了關于Python?excel合并居中值相同單元格的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Python手搓郵件發(fā)送客戶端

    Python手搓郵件發(fā)送客戶端

    這篇文章主要為大家詳細介紹了如何使用Python手搓郵件發(fā)送客戶端,支持發(fā)送郵件,附件,定時發(fā)送以及個性化郵件正文,感興趣的可以了解下
    2025-01-01
  • 基于python 微信小程序之獲取已存在模板消息列表

    基于python 微信小程序之獲取已存在模板消息列表

    這篇文章主要介紹了基于python 微信小程序之獲取已存在模板消息列表的相關知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • matplotlib.pyplot畫圖 圖片的二進制流的獲取方法

    matplotlib.pyplot畫圖 圖片的二進制流的獲取方法

    今天小編就為大家分享一篇matplotlib.pyplot畫圖 圖片的二進制流的獲取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python3 自動識別usb連接狀態(tài),即對usb重連的判斷方法

    python3 自動識別usb連接狀態(tài),即對usb重連的判斷方法

    今天小編就為大家分享一篇python3 自動識別usb連接狀態(tài),即對usb重連的判斷方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python中python-nmap模塊的使用介紹

    Python中python-nmap模塊的使用介紹

    這篇文章主要介紹了Python中python-nmap模塊的使用,主要是portScanner()類方法展開全文,portScanner()類用于實現(xiàn)對指定主機進行端口掃描,更多介紹內容,需要的朋友可以參考一下
    2022-02-02

最新評論

昭通市| 富宁县| 万载县| 顺昌县| 屏东市| 三台县| 武山县| 孝感市| 丰台区| 石景山区| 新和县| 洛阳市| 正蓝旗| 泉州市| 保靖县| 林州市| 兴安县| 余庆县| 金华市| 东安县| 陈巴尔虎旗| 湘潭市| 乌兰浩特市| 山阴县| 土默特右旗| 汝阳县| 湄潭县| 铁力市| 略阳县| 永登县| 金湖县| 江陵县| 鄂托克前旗| 将乐县| 年辖:市辖区| 庆阳市| 马鞍山市| 忻州市| 成安县| 五莲县| 墨竹工卡县|