python基礎筆記(非系統/自用/參考小甲魚的零基礎入門學習python)下

31.定義一個類:  class class_name:      建立對象: 對象名 = class_name()  繼承:   class class_name2(parent_classname):java

             屬性、方法                                  pass #空語句用來維持代碼結構python

 

32.python的self關鍵字至關於java的this,使用:將self做爲方法的第一個參數函數

__init__(self,參數1,2,3,...):至關於構造方法,使用:this

私有:在python中定義私有變量只須要在變量或函數名前加「__」兩個下劃線,那麼這個函數或變量就爲私有的spa

因爲name爲私有,故直接訪問是不容許的,但python的私有是僞私有,能夠用:對象名._類名__屬性來訪問,eg: p._Peason__name --> '小甲魚'對象

super([指定父類名無關緊要])函數:用來調用父類的方法,使用eg:super().__init__(self) #調用父類的構造方法blog

python支持多繼承,語法:class child_class_name(parent1,parent2,...) #儘可能別用,容易亂繼承

組合:ip

注意:若是類的屬性和方法名相同,屬性會覆蓋方法字符串

在建立類的時候,不要試圖在一個類裏面定義出全部能想到的特性和方法,應該利用繼承和組合機制來進行擴展;

用不一樣的詞性來命名,如屬性名用名詞,方法名用動詞

 32.綁定:python嚴格要求方法須要有實例才能被調用;因爲對象調用本身的綁定方法,會自動將對象看成第一個參數傳遞進去,因此,當類中方法沒有帶參數時,而又給它傳遞了一個,顯然是會報錯的。反之,直接用類來調用方法時,則不會將本身做爲參數傳遞進去,當方法有self參數時(self參數必須放在第一個參數位),用類名調用方法則會報錯

==>   

 

類中定義的屬性和方法是靜態的,當程序結束纔會被釋放,因此在大多數狀況下應該考慮用self屬性,def set屬性(sefl,cs1,cs2...):   self.sx1 = cs1  self.sx2 = cs2  

 類屬性一般用來跟蹤與類相關的值

33.一些相關的BIF:

issubclass(class,classinfo):用來判斷classinfo是否爲class的子類,classinfo能夠是由類對象組成的元組,只要class與其中任何一個候選類的子類,則返回true

isinstance(object,classinfo):用來判斷對象是否爲classinfo的實例對象,若是第一個參數不是object對象類型,它就只返回false,若是第二個參數不是類或類對象組成的元組,會拋出一個TypeError異常

hasattr(object,'屬性'):用來判斷對象中是否有string這個屬性(用字符串表示)

getattr(object,'屬性',[提示語]):用來獲取對象存在的屬性

setattr(object,'屬性',value):用來給屬性賦值

delattr(object,'屬性'):用來刪除對象中指定的屬性(非刪除類的屬性),若是屬性不存在則拋出AttributeError異常

 property(fget = None,fset = None, fdel = None,doc = None):用屬性設置屬性,參數分別爲獲取屬性方法、設置屬性方法、刪除屬性方法

==>==>

34.魔法方法 :__xxx__,可以在適當的時候被自動調用

 __new__(class,參數1234..):建立對象第一個執行的魔法方法

 

 __init__(self)的返回值必定是None,若試圖讓__init__有返回值則會報錯

__del__(self):垃圾回收機制會調用的方法,當類的對象生成之後,全部對象的引用被del消除後才調用__del__方法

35. 控制屬性訪問的魔法方法(系統和用戶在賦值、刪除和獲取的時候系統會自動調用這些方法)

__getattr__(self,name)  -定義當用戶試圖獲取一個不存在的屬性時的行爲 

__getattribute__(self,name) -定義當該類的屬性被訪問時的行爲,比__getattr__先

__setattr__(self,name,value) -定義當一個屬性被設置時的行爲

__delattr__(self,name) -定義當一個屬性被刪除時的行爲

36.描述符:將某種特殊的類型的類的實例指派給另外一個類的屬性

 特殊類型:要實現一下三個方法其中一個-->

__get__(self,instance,owner) -用於訪問屬性,它返回屬性的值

__set__(self,instance,value) -將在屬性分配操做中調用,不返回任何內容

__delete__(self,instance) -控制刪除操做,不返回任何內容

對於Test類,MyDecriptor類就是Test的描述符類

37.容器類型的協議:

若是但願定製的容器是不可變的話,只須要定義__len__()和__getitem__()方法

若是但願定製的容器是可變的的,除了__len__()和__getitem__()方法,還須要定義__setitem__()和__delitem()兩個方法

38.迭代器兩個BIF,iter()--對應的魔法方法->__iter__()返回迭代器自己、next()---->__next__()-->決定了迭代器的規則

當沒有元素時就會拋出一個StopIteration的異常

相關文章
相關標籤/搜索