標籤:nbsp 調用 ror send ... code dict __str__ style
小總結:
物件導向的好處
更容易擴充,提高代碼的使用效率,使程式碼群組織性更強、更清晰,更適合複雜項目的開發
封裝:把功能的實現細節封裝起來,之暴露調用介面
多態:介面的繼承
定義:
類 : 模板
對象 : 執行個體化的類
屬性:私人屬性 __private
公有屬性 存在類中的變數
成員屬性 執行個體變數
方法 :函數
建構函式:
解構函式:執行個體被銷毀(手動刪除變數或者程式結束),調用解構函式
新式類VS經典類:
新式類:繼承路徑:廣度優先
經典類:繼承路徑:深度優先
一、抽象介面:
1 class Alert(object): 2 ‘‘‘警示類‘‘‘ 3 def send(self): 4 raise NotImplementedError 5 class MailAlert(Alert): 6 def send(self,msg): 7 print(‘_____sending:‘,msg) 8 class SMSAlert: 9 pass10 m=MailAlert()11 m.send(‘ooooooooooooooooo‘)
二、類方法:
類方法只能訪問類的公有屬性,不能訪問成員屬性和私人屬性
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @staticmethod 6 def eat(name): 7 print(‘%s is eating...‘%name) 8 @classmethod 9 def h(self):10 print(‘%s‘%(self.id))11 #不需要執行個體化直接通過類調用12 Person.eat(‘eeeeeeeeeee‘)13 p=Person(‘song‘) #類方法只能調用公有屬性,不嗯給你調用成員屬性和私人屬性14 p.h()
靜態方法既不能訪問公有屬性也不能訪問執行個體屬性
三、屬性方法
把一個方法變成一個變數
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @property 6 def talk(self): 7 print(‘%s say‘%self.name) 8 p=Person(‘songxiaonan‘) 9 # p.talk() #報錯10 p.talk # songxiaonan say
給屬性方法變成變數後,給這個變數附一個值 @talk.setter
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @property 6 def talk(self): 7 print(‘%s say‘%self.name) 8 @talk.setter 9 def talk(self,msg):10 print(‘talk %s‘%msg)11 p=Person(‘songxiaonan‘)12 # p.talk() #報錯13 p.talk # songxiaonan say p.talk調用的是第一個talk14 p.talk=‘ahahhahhahahaha‘ #talk ahahhahhahahaha p.talk=值 就是調用的第二個talk
刪除變數 @talk.deleter
1 class Person(object): 2 id=‘11111111111111111‘ 3 def __init__(self,name): 4 self.name=name 5 @property 6 def talk(self): 7 print(‘%s say‘%self.name) 8 @talk.setter 9 def talk(self,msg):10 print(‘talk %s‘%msg)11 @talk.deleter12 def talk(self,msg):13 print(‘delete.....‘)
del p.talk
四、類的其他特殊方法
1 class Animal(object): 2 country=‘BeiJing‘ 3 def __init__(self,name,age): 4 self.name=name 5 self.age=age 6 def __str__(self): # 定製執行個體的返回結果 7 return ‘%s——%s‘%(self.name,self.age) 8 9 A = Animal(‘CAT‘, ‘12‘)10 print(A.__dict__) # 列印執行個體的屬性 {‘name‘: ‘CAT‘, ‘age‘: ‘12‘}11 print(A.__module__) # 列印執行個體所在的模組 __main__12 print(A.__class__) # 列印執行個體所在的類 <class ‘__main__.Animal‘>13 print(A) # CAT——12
python-物件導向進階