亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python基礎學習之類與實例基本用法與注意事項詳解

系統 1814 0

本文實例講述了Python基礎學習之類與實例基本用法與注意事項。分享給大家供大家參考,具體如下:

前言

和其他編程語言相比,Python用非常少的新語法和語義將類加入到語言中。Python的類提供了面向對象編程的所有標準特性:類繼承機制允許多個基類,派生類可以覆蓋它基類的任何方法,一個方法可以調用基類中相同名稱的的方法。對象可以包含任意數量和類型的數據。和模塊一樣,類也擁有Python天然的動態特性:它們在運行時創建,可以在創建后修改。

Python的類

Python類實例時, 先調用__new__方法,返回該類的實例對象,這個實例對象就是__init__方法的第一個參數self,即self是__new__的返回值

(1)類的訪問控制:

①默認:Python中的成員函數和成員變量都是 公開的(public) ,在python中沒有類似public,private等關鍵詞來修飾成員函數和成員變量。

②私有:在python中定義私有變量只需要 在變量名或函數名前加上”__“兩個下劃線,那么這個函數或變量就是私有的了

原理:在內部,python使用一種name mangling技術, 將__membername替換成_classname__membername ,也就是說,類的內部定義中,所有以雙下劃線開始的名字都被"翻譯"成前面加上單下劃線和類名的形式。

例如:為了保證不能在class之外訪問私有變量,Python會在類的內部自動的把我們定義的__spam私有變量的名字替換成為_classname__spam(注意,classname前面是一個下劃線,spam前是兩個下劃線),因此,用戶在外部訪問__spam的時候就會提示找不到相應的變量。

注:python中的私有變量和私有方法仍然是可以訪問的;訪問方法如下:

私有變量:實例._類名__變量名

私有方法:實例._類名__方法名()

(2)Python類和類成員的私有化支持:

其實,Python并沒有真正的私有化支持,但可用下劃線得到偽私有。所以一般需要統一規范:

① _xxx:"單下劃線" 開始的成員變量叫做 保護變量(protected),意思是只有類實例和子類實例能訪問到這些變量

需通過類提供的接口進行訪問;不能用' from import * '導入;

② __xxx:類中的私有變量/方法名(Python的函數也是對象,所以成員方法稱為成員變量也行得通),

" 雙下劃線 "開始的是私有成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數據;

③ __xxx__系統定義名字,前后均有一個“雙下劃線”代表python里特殊方法專用的標識,如__init__()代表類的構造函數;

注:python派生類可以與父類同名,因此這種情況可以使用私有變量:

            
class A():
  def __init__(self):
    self.__name='python' #翻譯成self._A__name='python'
class B(A):
  def func(self):
    print self.__name #翻譯成print self._B__name
instance=B()
#instance.func()#報錯:AttributeError: B instance has no attribute '_B__name'
print instance.__dict__
print instance._A__name


          

輸出結果:

{'_A__name': 'python'}
python

注:當B類取名A時,則instance.func()可以直接調用

(3)Python類的繼承:

python類和其他OOP語言一樣,都可以使用繼承功能,也同樣不允許多繼承,但可以通過多級繼承來實現。

(1)繼承方法:派生類的類名的()里面寫入父類的類名;

(2)構造函數:子類中構造函數加上super(子類,self).__init__(參數1,參數2,….);

(3)實例化順序:實例化對象c---->c調用子類__init__()---->子類__init__()繼承父類__init__()----->調用父類__init__();

(4)判斷繼承的函數:isinstance()及issubclass(),其中isinstance()用于檢查實例類型;issubclass()用于檢查類繼承;

(5)方法重寫:子類中定義與父類同名的方法,子類實例調用時就會使用重寫的方法;

(6)子類重寫構造函數:子類構造函數中不使用super調用父類即可;

(7)多態:當子類和父類都存在相同名字的方法時,子類的方法覆蓋了父類的方法,在代碼運行時,會調用子類的方法;

注:多態實現了開發-封閉原則:

①對擴展開放(Open for extension):允許子類重寫方法函數;
②對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數;

Python類的其他知識

(1)python中self和cls的區別:

self表示一個具體的實例本身 ,相當于php的this。如果用了staticmethod,那么就可以無視這個self,將這個方法當成一個普通的函數使用;

cls表示這個類本身 ;

@staticmethod:只能用類名去調用的方法;
@classmethod:既能用實例去調用,也能用類名去調用的方法;

(2)多重繼承的方法搜索順序:

對于多數應用來說,在最簡單的情況下,你可以認為搜索從父類所繼承屬性的操作是深度優先、從左至右的,當層次結構中存在重疊時不會在同一個類中搜索兩次。 因此,如果某一屬性在 DerivedClassName 中未找到,則會到 Base1 中搜索它,然后(遞歸地)到 Base1 的基類中搜索,如果在那里未找到,再到 Base2 中搜索,依此類推。

真實情況比這個更復雜一些;方法解析順序會動態改變以支持對 super() 的協同調用。 這種方式在某些其他多重繼承型語言中被稱為后續方法調用,它比單繼承型語言中的 super 調用更強大。

動態改變順序是有必要的,因為所有多重繼承的情況都會顯示出一個或更多的菱形關聯(即至少有一個父類可通過多條路徑被最底層類所訪問)。 例如,所有類都是繼承自 object,因此任何多重繼承的情況都提供了一條以上的路徑可以通向 object。 為了確?;惒粫辉L問一次以上,動態算法會用一種特殊方式將搜索順序線性化, 保留每個類所指定的從左至右的順序,只調用每個父類一次,并且保持單調(即一個類可以被子類化而不影響其父類的優先順序)。

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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级大片在线观看 | 美女粉逼 | 青草精品视频 | 97影院支持微信微博观看 | 日韩毛片在线影视 | 在线观看三级拍拍视频 | 96精品视频在线播放免费观看 | 久久免费区一区二区三波多野 | 久草在线免费看 | 国产精品久久久久国产精品三级 | 成人免费视频日本 | aaa级精品久久久国产片 | 国产精品伦理久久久久 | 黄片毛片在线观看 | 亚洲国产天堂久久精品网 | 视色tv| 国产成+人欧美+综合在线观看 | 夜夜操综合 | 91国内在线观看 | 亚洲国产成人久久综合一 | 久久精品国产亚洲综合色 | 国产成人亚洲精品 | 看看的在线视频国产 | www.午夜色| 欧美成人精品一区二区三区 | 久久精品久久久久久久久人 | 欧美成人全部免费观看1314色 | 色婷婷久久 | 一级做a爱片特黄在线观看免费看 | 久99久爱精品免费观看视频 | 久草手机在线观看 | 午夜精品久久久久久久爽 | 九一视频在线 | 亚洲 欧美 日韩 在线 | 久久精品一 | a在线观看视频 | 九九视频热 | 亚洲精品一级一区二区三区 | 日日日干干干 | 亚洲国产午夜精品理论片的软件 | 日日夜夜操天天干 |