遊戲編程與基礎day15

面向對象特性

封裝 繼承 多態 抽象

封裝

1. 任何對象都有明確的邊界,將屬性保護在邊界之內  -- 可以將數據進行隱藏
2. 封裝的粒度
	粒度過小:
		對象過於簡單,過程過於複雜
	粒度過大:
		對象過於複雜,不利於各司其職
分門別類
封裝的好處
	簡化了編程模型,更容易記憶,調用封裝的內容。
	體現了代碼可重用性

繼承性

1. 類與類之間的關係
2. 父類(更加抽象的類) 與 子類(相對具象的類)
3. 語法規範
		class 子類類名(父類的類名):
			pass
	
繼承的特點:
		1. 子類可以繼承父類成員,但是不能繼承父類的私有成員
			本質上私有成員也被繼承了下來,只不過訪問方式發生了改變
		2. 如果子類沒有初始化方法,則調用父類的初始化方法
		3. 如果子類和父類都沒有初始化方法,則調用object的初始化方法
		4. 如果子類實現了和父類一樣的方法,則子類的方法會遮蔽父類的方法。
		5. python是多繼承的,一個子類可以繼承多個父類。
			1.亂倫問題
			2.鑽石繼承問題(菱形問題)
				如果有一個類,有多個子類,這些類又有相同的子類,此時子類調用父類的初始化方法時,越高級的類調用的次數越多,造成繼承浪費。
				解決方案:
				  super().__init__()
				  super() 代指父類的實例對象(mro繼承鏈式關係)	

多態性

1. 不同對象收到相同消息時產生的不同動作。
		依託於繼承的
		父類可以有多個子類的表現形式
		使用父類的聲明,可以傳入任何子類,依然可以正確運行。
2. 沒有繼承就沒有多態
		多態是繼承的衍生品
		
		
3. 不同對象可以具有多種表現形式。
		
多態的作用:
	1.增加了程序的靈活性
	2.增加了程序的可擴展性

類與對象在python中一些內置函數

1. issubclass(clss1,class2) 
 	如果class1 是class2的子類 返回True 否則返回False
 	
2. isinstance(obj1,class1)
	如果obj1是class1的實例對象 則返回True 否則返回False
	
3, hasattr(obj1,name)
	如果這個對象有name屬性返回True
	
4. getattr(obj1,name[,default])
	如果obj1中有name屬性則返回name屬性對應的值,如果沒有且沒有default則報錯,如果沒有但是有default則返回default
	
5. delattr(obj1,name)

6. setattr(obj1,name,value)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章