多态和规范

python规范(接口类)

接口类可以规范代码,但接口类本身是不实现的

class Payment:
      def pay(self,money):
            raise Notlmplemented
    

class Wechat(Payment):
    def pay(self, money):
        print('已经用微信支付了%s元' % money)


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


class Applepay(Payment):
    def fuqian(self, money):
        print('已经用applepay支付了%s元' % money)


def pay(pay_obj, money):  # 统一支付入口
    pay_obj.pay(money)   

wechat = Wechat()
ali = Alipay()
app = Applepay()
pay(ali,200)
pay(app,200)

 运行后如下

app = Applepay()
TypeError: Can't instantiate abstract class Applepay with abstract methods pay

  

以下是接口类的另一种写法

from abc import abstractmethod, ABCMeta


class Payment(metaclass=ABCMeta):  # 元类 默认的元类 type
    @abstractmethod
    def pay(self, money): pass  # 没有实现这个方法

接口隔离原则

 

接口类在python中不存在,只是一种规范,python中自带多继承所以我们直接用class来实现接口类

抽象类

多态

多态指的是一类事物有多种形态

动物有多种形态:人,狗猪

import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    @abc.abstractmethod
    def talk(self):
        pass

class People(Animal): #动物的形态之一:人
    def talk(self):
        print('say hello')

class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('say wangwang')

class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('say aoao')

 鸭子类型

 

posted @ 2019-04-28 14:51  Boy^  阅读(107)  评论(0)    收藏  举报