類是抽象的模版,例如汽車;而實例則是擁有相同方法的類的實現,例如汽車裏面有大衆、寶馬、奔馳等等,這些車都能在地面上跑,可是它們的具體數據能夠不同。python
calss Student(object) #object是全部類的父類,若是沒有繼承的父類就填該類 pass #定義類是經過pass關鍵字,以後能夠實例化具體的類 calss Student(object) #類的實例 def __init__(self,name,age)#特殊函數__init__ self.name = name self.age = age def speak(self,word = ‘nihao’) print(word + self.name)
python的實例是動態語言,因此容許用戶自由綁定任何數據,例子:後端
student = Student(syz,18) student.score = 100
對於不想讓外部訪問的變量或者數據,能夠定義私有變量,變量前面添加兩個下劃線__name,那麼將不能經過student.__name的方式直接訪問,實現原理是在內部生成_Student__name變量代替__name變量,可是此時注意,不要認爲調用student.__name = syz的方式修改,由於此時至關於添加了一個__name的變量,而程序的self__的變量並無變。函數
爲了獲得或者修改私有變量,須要定義修改函數或者獲取函數對象
def set_name(self,name): self.__name = name def get_name(self): return self.__name
注意:__abc__先後都有雙下劃線的變量時特殊變量,函數能夠直接訪問,注意私有變量不要這樣定義。blog
私有變量跟前面的內部變量仍是有區別的,由於前邊只加一個下劃線的變量屬於內部變量,原則上仍是能夠被外部變量訪問的。繼承
子類定義能夠繼承父類,而且能夠在父類的基礎上作修改,從而體現多態性。get
例子:input
def Animal(object): def run(self): print(‘I’m running’) def Dog(Animal): def run(self): print(‘A dog running’) pass def Cat(Animal): def run(self): print(‘A cat running’) pass
鴨子類型,只要有相應的方法,就看作是相似的。只要會跑就把他看作鴨子it
isinstance(‘123’,str) class
True
getattr() setattr() hasattr()
# 首先你有一個command.py文件,內容以下,這裏咱們倘若它後面還有100個方法 class MyObject(object): def __init__(self): self.x = 9 def add(self): return self.x + self.x def pow(self): return self.x * self.x def sub(self): return self.x - self.x def div(self): return self.x / self.x # 而後咱們有一個入口文件 exec.py,要根據用戶的輸入來執行後端的操做 from command import MyObject computer=MyObject() def run(): inp = input('method>') if inp == 'add': computer.add() elif inp == 'sub': computer.sub() elif inp == 'div': computer.div() elif inp == 'pow': computer.pow() else: print('404')
上面使用了if來進行判斷,那麼倘若個人command裏面真的有100個方法,那我總不可能寫100次判斷吧,因此這裏咱們就會用到python的反射特性,看下面的代碼
from command import MyObject computer=MyObject() def run(x): inp = input('method>') # 判斷是否有這個屬性 if hasattr(computer,inp): # 有就獲取而後賦值給新的變量 func = getattr(computer,inp) print(func()) else: # 沒有咱們來set一個 setattr(computer,inp,lambda x:x+1) func = getattr(computer,inp) print(func(x)) if __name__ == '__main__': run(10)