多态就是继承的体现
多态时间上是依附与继承的的两种含义:“”改变“”和“扩展”本身就意味着必须有机制去自动选用你改变过的扩展的版本,古无多态,则2种含义就不能实现
所有多态实质上是继承的实现细节,那么让多态与封装、继承者两个概念并列,显然不是符合逻辑的
封装:
第一层面的封装:类就是麻袋,这本身就是一种封装
第二层面的封装:类中定义私有的,外部无法访问。只是约定实际还是可以访问。1个下划线,直接下划线调用,2个下划线。2个下划线知道类名是可以直接调用的只是被修改而已
第三层面的封装:明确区分内外,内部的实现逻辑,外部不知晓,并且为封装到内部的逻辑提供一个访问接口给外部使用---真真意义的封装
#注意:设计之前应该确定一定需要隐藏的在隐藏,不然后面接口开无数
class Room:
def __init__(self,name,ower,width,length,high):
self.name=name
self.ower=ower
self.__width=width#使用__来定义私有的,只能内部使用
self.__length=length
self.__high=high
def aera(self):#由于是类的内部可以访问class的属性,也是定义一个函数(接口函数)
return self.__width * self.__length
r1=Room("卫生间","张三",100,100,100)
#加入现在我们要求面积,由于是__开头的外部无法调用
# area=r1.__width* r1.__length#错误的
# print(area)
#为了能调用内部(类的__属性)的需要调用接口函数aera
print(r1.aera())
面向对象的优点:
从编程进化论我们得知,面向对象是一种更高级别的结构化编程方式,它的好处就是以下两点:
1、通过封装明确内外,你作为类的缔造者,你是上帝,上帝造物的逻辑你无需知道(你知道tm也成不了上帝),上帝想让你知道的你才能知道,这样就明确了划分了等级,物就是调用者,上帝就是物的创造者
2、通过继承+多态在语言层面支持了归一化设计
注意:不用面向对象语言(即不用类(class)),一样可以归一化(如范文件概念,游戏行业的一切皆精灵),一样可以封装(通过定义模块和接口),只是用面向对象语言可以直接用语言元素显示声明这些而已
python用常用的术语:
抽象/实例 组合 封装/接口 派生/继承/继承结构 泛化/特化 多态 自省/反射