Python面向对象
面向对象三大特性
实例化一个类需要经过步骤:
- python 调用内置的type类
- 然后type调用内置的元类mateClass
- mateClass再调用
__new__方法将类实例化,此时完成了第一步 - 这个实例将会初始化自己的类变量,就是把自己从头到尾扫视一遍,
- 进入构造方法,并初始化自己的实例变量。
封装
概念:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
实现方式:双下划线
目的:代码私有化,不让外部调用和继承
私有化特征:
- 类外部不能直接调用,无论属性还是方法。
- 私有属性(方法)在空间会自动命名为 _类名__属性名(方法名) (ps:在原有私有属性名前加了 _类名)
- 继承的时候可根据需求,当不需要子类继承时可私有化属性方法
三个装饰器的使用:
-
property:可将类的方法伪装成属性
@property def name(self): return self.__name @name.setter def name(self,val): self.__name = val -
classmethod:将实例方法变成类方法
# 原实例方法调用方式 test = Solution() test.func() # 类方法调用方式 Solution.func() -
staticmethod:将方法定义为静态方法,或者说是外部方法。
-
继承
目的:着重于补充和派生,减少类与类之间的代码冗余。
继承方式:
- 单继承:父类只有一个
- 多继承:父类有多个,super()在多继承中找父类是根据子节点所在图的mro顺序寻找下一个类。遵循广度优先算法。
派生:对于被继承的类来说,这是继承父类的属性和方法,对新建类创建新的属性和方法,这是一种派生。
空间问题:
对象会先从当前类中寻找属性,如果没有再根据继承的mro去父类中寻找。
Object:
就算没有继承关系,都会默认继承Object。初始化时会调用Object类中init()方法
- 多态
多态是面向对象的设计原则,现在有三种基本设计原则
-
开放封闭原则:
开放是指继承时允许在父类源代码上拓展添加功能---------装饰器。
封闭是指不可以对源代码进行修改 -
依赖倒置原则:
高层模块不应该依赖底层模块,二者都应该依赖抽象;抽象模块不应该依赖细节,细节应该依赖抽象。
换言之,应该针对接口编程,而不是针对现实编程。
举个错误例子:
鹦鹉类继承的动物类,鹦鹉类要实现说人话这一个方式,但是动物并没有这个方法,然后我们就去修改动物类。
正确的方法是在鹦鹉层和动物层之间加一个抽象层(拟人动物),让这个抽象继承动物层,鹦鹉层继承这个抽象层。
简单来说,不要改源码!遇到不能实现的就在加一层模型。 -
接口隔离原则
概念:接口提取了一群类共同的函数,可以把这个类看成是函数的集合。然后让子类去实现。这样做的意义在于归一化。其实就是java的interface
归一化:让使用不需要关心对象里面是什么,只需要知道这些对象的功能是什么就行了。
鸭子类型:
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
我们不关心这个对象的类型是什么,只要它满足该有的行为就行了。

浙公网安备 33010602011771号