一.预备知识
最近开始尝试做一些tornado商城项目,在开始之前需要引入一些项目设计知识,如接口,抽象方法抽象类,组合,程序设计原则等,个人理解项目的合理设计可增加其灵活性,降低数据之间的耦合性,提高稳定性,下面介绍一些预备知识
1.接口
其实py中没有接口这个概念。要想实现接口的功能,可以通过主动抛出异常来实现
接口作用:对派生类起到限制的作用
例:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 接口,python中的接口,通过在父类中主动抛出异常实现 接口的作用:起到了限制的作用 """ class IFoo: def fun1(self): pass raise Exception("----") class Bar(IFoo): def fun1(self): #方法名必须和父类中的方法名相同,不然没办法正常执行,会抛出异常 print("子类中如果想要调用父类中的方法,子类中必须要有父类中的方法名") def fun2(self): print("test") obj = Bar() obj.fun2()
2.抽象方法抽象类
抽象类,抽象方法是普通类和接口的综合,即可以继承也可以起到限制作用
由于python 本身没有抽象类、接口的概念,所以要实现这种功能得abc.py 这个类库,具体实现方法如下 :
#!/usr/bin/env python # -*- coding: utf-8 -*- """ 抽象类,抽象方法 抽象类,抽象方法是普通类和接口的综合,即可以继承也可以起到限制作用 """ import abc class Foo(metaclass=abc.ABCMeta): def fun1(self): print("fun1") def fun2(self): print("fun2") @abc.abstractclassmethod def fun3(self): pass class Bar(Foo): def fun3(self): print("子类必须有父类的抽象方法名,不然会抛出异常") obj = Bar() obj.fun1() obj.fun2() obj.fun3()
3.组合
python中“多用组合少用继承”,因为继承的偶合性太强,可以把基类,当做参数传入派生类中,用于解偶
如;
#!/usr/bin/env python # -*- coding: utf-8 -*- #继承 class Animals: def eat(self): print(self.Name + " eat") def drink(self): print(self.Name + " drink") class Person(Animals): def __init__(self, name): self.Name = name def think(self): print(self.Name + " think") obj = Person("user1") obj.drink() obj.eat() obj.think()