文章目录
面向对象的三大特征
-
封装
-
继承
-
多态
封装特征
实际工作中很多的成员不方便为对象之外的访问或者操作的,所以需要限定以下是否可以操作成员
封装特性就是对于成员操作进行限制的保护性措施!
###面向对象的封装分为三个级别:
- 私有化封装
- 受保护的封装(暂时不讲,在继承章节讲)
- 公共的封装
对象/类成员的访问:
- 当前类/对象内部访问 (在类的结构内部)
- 类和对象的外部访问 (在类的结构外部)
- 类和对象的子类/子对象的访问 (在类的结构外部,在子类/对象的内部)
私有化封装:
- 方法:在成员属性或方法之前,添加双下划线,就可以私有化成员。
- 特征:私有化的成员属性和方法,无法在类/对象的外部访问;私有化成员仅允许在类/对象的内部访问
公共的封装:
- 方法:任何成员在没有进行私有化操作的时候默认都是公共的封装。
- 特征:公共的封装成员属性和方法,在任何位置都可以被访问。
Python封装的迷幻~:(了解,但是不允许使用)
其实python没有实现和其他语言一样的面向对象封装策略(还不是很完备)
私有化封装采用了name mangling(改名)的策略实现私有化操作。并不是真正的私有化。
改名策略:将原有成员属性或者方法名修改为 _类名__成员名
继承特征
什么是继承?继承父母的愿望,继承父母的财产……继承火的遗志……
###计算机中的继承:
面向对象中的继承就表示一个类获取另外一个类的成员的操作。(并非所有成员)
继承相关的概念:
- 被其他类继承的类,这个类叫做父类,也叫做基类或者叫做超类。
- 继承其他类的类,这个类叫做子类,也叫做派生类。
继承的意义:
提高代码的重用率,建立新的类与类的关系,方便其他逻辑操作。
继承的格式:
class 父类:
pass
class 子类(父类):
pass
继承的特征:
-
在不指定父类的情况下,所有的类均继承自object类(系统提供的!)
-
子类继承父类就具有父类的所有成员。(私有化成员不可访问)
-
子类继承父类,不会将父类成员复制到子类中,子类如果需要成员可以找父类索取。
-
私有化的成员,允许在子类中单独建立一份,不会找父类索取私有成员。
-
子类可以根据需求添加自己独有的成员来进行操作。
-
子类重载父类的成员。仅仅是对子类/对象有效并不会影响父类。
-
子类在重载父类的方法的时候,可以调用父类的方法来进行操作:
- super().父类方法名() ->> 必须是带有self的对象方法才可以使用
- 父类名.父类方法名() ->>任何方式都允许
单继承与多继承:
-
单继承:一个类只能继承一个父类的方式。
(生物角度):
-
多继承:一个类可以继承多个父类的方式。
(社会角度):
单继承案例:
class 父类:
pass
class 子类(父类):
pass
补充内容:受保护的封装
- 私有化封装 private
- 受保护的封装 protected
- 公共的封装 public
类/对象内 | 类/对象外 | 子类/子对象中 | |
---|---|---|---|
私有化的封装 | √ | × | × |
受保护的封装 | √ | √ | √(不允许) |
公共的封装 | √ | √ | √ |
注意:python目前不支持设定受保护的成员,但是开发者有约定的使用方式。
受保护的封装
:在成员名称前面加一个下划线。