游戏编程与基础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)


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