调用父类元素的方法
1、super().__init__() 可以不加self 要传参
2、父类名.__init__(self) 必须加self 要传参
3、super(子类名,self).__init__()可以不加self 要传参
面向对象应用--设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
1. 简单工厂模式
1. 使用函数实现解耦:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
简单工厂模式的好处:
工厂函数、工厂类对具体的生成环节进行了封装,这样有利于代码的后需扩展,即把功能划分的更具体,
工厂模式有两种:
1.简单工厂模式:由一个工厂统一管理子类对象,如果再添加子类,则需要改变工厂
2.工厂方法模式: 一个子类类型对应一个工厂,好处:不会影响整体使用
定义了一个创建对象的接口(可以理解为函数),但由子类决定要实例化的类是哪一个,工厂方法模式让类的实例化推迟到子类,抽象的CarStore提供了一个选择创建对象的方法select_car,也叫作工厂方法。
__new__方法(重新创建类对象)
其实真正的第一个动作:__new__ ,通常__new__方法由python解释器完成了
object将__new__()方法定义为静态方法,并且至少需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供。
# __new__ 参数不是self而是cls 参数就是模型对象 ---- 类对象
使用该方法创建当前实例对象,一般不重写,就算重写也是调用父类的__new__方法,注意:一定要返回创建的对象如果没有返回,__init__方法将不会被Python解释器调用 cls是类对象
注意:
__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例;或者直接是object的__new__出来的实例。
__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。
单例模式
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。怎么保证打印的名字也是同一个呢?
代理模式
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
代理模式一般涉及到的角色有:
抽象角色:声明真实对象和代理对象的共同基类(接口);
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的基类(接口)以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。