归一化设计,抽象类和接口类,接口隔离操作

一:什么叫归一化设计:

首先来看看下面这段程序:

class Alipay(Payment):
    def pay(self,money):
        print('使用支付宝支付了%s元'%money)

class QQpay:
    def pay(self,money):
        print('使用qq支付了%s元'%money)

def pay(a,money):
    a.pay(money)         #做归一化设计


a = Alipay()
pay(a,100) 
q = QQpay()
pay(q,100)
View Code

归一化设计就是要求:不管哪一个类的对象,都调用同一个函数去完成相似的功能,

二:接口类和抽象类

1,抽象类与接口类就是建立规范的,制定一个类的metaclass是ABCMeta,那么这个类就变成了一个抽象类(接口类)。

2,抽象类中所有被abstractmethod装饰的方法都必须被继承的子类实现,如果不实现,那么在实例化阶段将会报错。

3,无论是抽象类还是接口类metaclass=ABCMeta 都不可以被实例化。

from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
    @abstractmethod
    def pay(self):pass  # 抽象方法

class Alipay(Payment):
    def pay(self,money):
        print('使用支付宝支付了%s元'%money)

def pay(a, money):
    a.pay(money)

a = Alipay()
pay(a,100)
View Code

三:接口隔离操作

1,什么叫接口?

python里并没有接口的概念,那接口是哪儿来的概念呢?因为java类没有多继承,接口可以实现多继承。而在python中,满足接口隔离原则,由于python本身支持多继承,所以就不需要接口的概念了.

2,抽象类和接口类在python中是相同的,都是用于约束子类中的方法的,只要是抽象类和接口类中被abstractmethod装饰的方法,都需要被子类实现。需要注意的是,当多个类之间有相同的功能也有不同的功能的时候,应该采用多个接口类来进行分别的约束

3,在java中,抽象类和接口截然不同,抽象类的本质还是一个类,是类就必须遵循单继承的规则,所以一个子类如果被抽象类约束,那么它只能被一个父类控制,当多个类之间有相同的功能也有不同的功能的时候,java只能用接口来解决问题。

from abc import ABCMeta,abstractmethod
class FlyAnimal(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):pass
    @abstractmethod
    def cal_flying_speed(self):pass
    @abstractmethod
    def cal_flying_height(self):pass
class WalkAnimal(metaclass=ABCMeta):
    @abstractmethod
    def walk(self):pass
class SwimAnimal(metaclass=ABCMeta):
    @abstractmethod
    def walk(self):pass
class Tiger(WalkAnimal,SwimAnimal):
    def walk(self):pass
    def swim(self):pass
class Monkey:
    def walk(self):pass
    def climb(self):pass
class Swan(FlyAnimal,WalkAnimal,SwimAnimal):
    def swim(self):pass
    def walk(self):pass
    def fly(self):pass
    def cal_flying_speed(self):pass
    def cal_flying_height(self):pass
class Parrot(FlyAnimal):
    def fly(self):pass
    def cal_flying_speed(self):pass
    def cal_flying_height(self): pass
View Code

猜你喜欢

转载自www.cnblogs.com/leiwei123/p/8856408.html