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的異常