python面向对象之抽象类和接口类

python抽象类是一个特殊的类,它的特殊在于只能被继承,不能被实例化,就是为了定制一个规范.

为什么要有抽象类:

  如果说类是从一大推对象中抽取相同的内容而来,那么抽象类就是从从一大推相同的类容抽取相同的内容而来,内容包含数据属性和函数属性.

python没有接口这个概念
抽象类,接口类:定义一个规范

 第一版
class Alipay:
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用支付宝支付%s元钱" % self.money)
class Jdpay:
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用京东支付了%s元钱" % self.money)
a1 = Alipay(200)
a1.pay()

a2 = Jdpay(200)
a2.pay()                 #  支付方式不同


 第二版  改进版  要求支付方式是一样
class Alipay:
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用支付宝支付了%s元钱" % self.money)

class Jdpay:
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用京东支付了%s元钱" % self.money)

def pay(obj):
    obj.pay()
a1 = Alipay(200)
a2 = Jdpay(1000)
pay(a2)
pay(a1)       #  相同的支付方法   归一化设计



#   第三版     制定规则,抽象类,接口类
from abc import ABCMeta,abstractclassmethod     #  模块
class Payment(metaclass=ABCMeta):   #  抽象类(接口类)
    @abstractclassmethod
    def pay(self):  #  制定一个规范
        pass

class Alipay(Payment):
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用支付宝支付了%s元钱" % self.money)

class Jdpay(Payment):
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用京东支付了%s" % self.money)

class Wechatpay(Payment):
    def __init__(self,money):
        self.money = money
    def pay(self):
        print("使用微信支付了%s" % self.money)

def pay(obj):
    obj.pay()
a1 = Alipay(300)
j1 = Jdpay(500)
w1 = Wechatpay(400)
pay(w1)

猜你喜欢

转载自www.cnblogs.com/caodneg7/p/9374129.html