首頁>技術>

一.屬性訪問函式

在編寫一個類以後,她所存在的屬性和方法,我們可以呼叫。但有時我們不清楚他是否存在這樣的屬性,所以我們可以進行校驗。例如下圖我們只編寫了name屬性,沒有編寫sex屬性,所以我們在使用sex屬性時會報錯。

1.hasattr(例項物件,屬性)

判斷屬性是否存在,返回值是bool型別,True是存在,False是不存在

2.getattr(例項物件,屬性)

得到屬性值,沒有則報錯,返回值是屬性值

3.setattr(例項物件,屬性)

設定屬性值,無返回值——None

4.delattr(例項物件,屬性)

透過簡單 if 判斷就能避免屬性不存在時,報錯的問題,同時也可以設定屬性值

三目運算

二.內建方法操作屬性

1.物件.getattribute(屬性)

獲取該例項物件的指定屬性值,返回屬性值,沒有就報錯

2.物件.setattr(屬性,屬性值)

設定該例項物件的屬性值,增加或修改,無返回值

3.物件.delattr(屬性)

三.屬性呼叫過程

首先判斷是python自動完成的

若有屬性,物件.getattribute(屬性)就會返回屬性值;

若沒有屬性則物件.getattr(屬性),若類有定義該方法,則執行定義的方法;若類沒有定義該方法,則會報錯

四.物件方法關係

1.內建函式(判斷)

(1) issubclass (類,類)

判斷第一個類是不是後面類的子類(object是所以子類的父類),第二個引數可以是一個元組(只要符合元組中的任意一個就會返回True,否則返回False)

(2)isinstance(物件,類)

判斷例項是否是後面類的例項

所有的資料型別都是一個類(int,str,list,set,dic),具體的值,都是類的例項。##判斷單個用type,判斷多個用 isinstance

五.魔法方塊

Python中很多內建方法都是兩個下劃線在兩邊,中間是單詞名字,並且這樣的方法名字有一定的特殊的含義,把這種方法都稱之為魔法方法

比如這裡的__new__方法,就是最開始呼叫的一個方法,會在初始化之前自動呼叫。__init__在建立例項的時候自動呼叫,__del__被析構時會呼叫。

1.單例模式:為了最佳化程式碼,類始終只有一個例項存在,節約空間

利用__new__方法,可以很方便的去實現一個類的單例模式

單例模式的意思是:類始終只有一個例項存在,不會同時出現多個例項

2.輸出魔法方法

__str__ : 修改print列印時的樣子__repr__ : 修改直接列印時的樣子

六.協議

類似於我們實際生活中的合同,按照規定提供相應的功能。

序列協議即定義__len__,__getitem__,__setitem__,__delitem__等協議,如果不需要改變,那後兩個就不要定義

Python中有很多的協議,比如序列協議等很多協議,只要遵守這些協議,既可以說是對應的型別,比如定義了序列型別協議,則定義的類就是序列型別

(1)列舉函式(enumerate)

(2)迭代器協議

讓我們的類變成可迭代的類,能夠使用for迴圈迭代

只要類實現了__iter__ 和 next 方法,則這個類就是迭代器,因此只要實現這兩個方法,則是可以迭代物件

(3)上下文協議

讓我們的類能使用with關鍵字

我們之前講過的with的使用,只要類裡面定義__enter__和__exit__這兩個方法,則可以使用with去使用此物件,如下計算程式執行時所用的時間

文中的 exc_type,exc_val,exc_tb 必須存在,with關鍵字縮排裡面的程式碼之前會執行__enter__協議方法縮排裡面的程式碼執行完會執行__exit__方法。

9
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 我寫的Spring Security學習電子書今天開源了