面向对象
1.单例模式
目的是为了确保某一类只有一个实例存在。我们可以使用__new__来控制实例的创建过程,代码如下:
class Singleton(object):
_instace=None #做一个标识 如果等于None说明还没被创建过
def __new__(cls, *args, **kwargs):
print('__new__')
if cls._instace == None:
cls._instace = object.__new__(cls)
return cls._instace
else:
return cls._instace
s1=Singleton()
s2=Singleton()
s3=Singleton()
print(id(s1))
print(id(s2))
print(id(s3))
#以上输出得到的ID地址为同一个,证明单例创建成功
在上面的代码中,我们将类的实例和一个类变量_instance关联起来,如果cls._instance为None则创建实例,否则直接返回cls._instance。
2.工厂模式(Simple Factory Pattern)
是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类 并且重写父类方法。
采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;
缺点是可实例化的类型在编译期间已经被确定,如果增加新类型,则需要修改工厂,不符合OCP(开闭原则)的原则。
(OCP原则:一个软件应用对扩展开放,对修改关闭)
多态:不同的类对同一个消息/动作做出不同的解释,执行不一样的代码
3个必要条件
1.发生继承关系
2.子类重写父类方法
3.里氏代换原则
好处:节省代码 更符合现实逻辑
下面我们看一个例子:
要求输入两个数和一个运算符,进行四则运算并输出得到结果。
类的结构图:
class Operation: #父类
def __init__(self,num1,num2):
self.num1=num1
self.num2=num2
d