1.類和實例java
類是抽象的模板,而實例是根據類建立出來的具體對象python
class Student(object):函數
def __init__(self,name,score):
self.name = name
self.score =scorespa
def print_score(self):
print('%s : %s' % (self.name,self.score))調試
bart = Student('Bart Simpson',99)
bart.print_score()code
2.類的內部的訪問限制對象
變量前加上兩個下劃線表示對外隱藏該字段,若是須要訪問,須要編寫相關的get和set方法繼承
以雙下劃線開頭和結尾的變量爲特殊變量,能夠直接訪問。字符串
以一個下劃線開頭的變量能夠訪問,但不推薦這樣。(python沒有機制阻止,一切靠自覺)get
3.多態和繼承
多態:當須要傳入父類的多個子類時,只須要在定義時將父類傳入,在實際調用時,子類就會調用實際的方法
開閉原則:對擴展開放,對修改封閉
python相對於java來講是動態語言,父類傳參數不是必須的,但須要確保內部有方法能夠調用
4.獲取對象信息
type(str)來判斷對象類型 isinstance(a,b)用來判斷class的類型(a是否爲b)
type能夠被isinstance來替代 (老是優先使用isinstance類型)
5.實例屬性和類屬性
實例屬性屬於各個實例全部,互不干擾;
類屬性屬於類全部,全部實例共享一個屬性;
不要對實例屬性和類屬性使用相同的名字。
6.使用@property
使用property裝飾器目的是限制類中屬性的取值或是否可讀,即對參數進行檢查
7.多繼承模式
不一樣於java中的單繼承,多實現的方式,pthon中使用的爲多繼承方式。以最頂層父類爲主,其餘類用Mixin修飾。
class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
8.定製類
__str__() /__repr__():返回字符串打印。區別:repr用來程序調試的
__iter__()/__next__():用於可迭代對象進行循環
__getitem__():取可迭代對象中的元素
__getattr__():動態修改屬性的取值
__call__():對實例進行調用 能夠把對象看做函數,把函數看做對象
9.枚舉類
python提供Enum('')來對多個元素進行枚舉
10.動態建立類
python是動態語言,函數和類的定義是在運行時建立的
能夠經過type()方法進行建立,還能夠經過元類方式建立