day 21接口类 抽象类 封装

class Payment:  # 抽象类,或者接口类:制定一个规范.
    def pay(self):pass


class QQ(Payment):
    def pay(self,money):
        print('您用qq支付了%s元' % money)


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

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

def pay(obj,money):
    obj.pay(money)  # a1.pay(200)

# q1 = QQ()
# a1 = Ali()
# pay(q1,100)  # 统一化设计
# pay(a1,200)
# w1 = Wechat()
# pay(w1,500)

# 第五版 强制制定规范,如果未按照规范执行,就会报错.
from abc import ABCMeta,abstractmethod

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

class QQ(Payment):
    def pay(self,money):
        print('您用qq支付了%s元' % money)
    def ret(self):
        print('支付失败....')

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

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

def pay(obj,money):
    obj.pay(money)  # a1.pay(200)

q1 = QQ()
a1 = Ali()
w1 = Wechat()
# q1 = QQ()
# a1 = Ali()
# pay(q1,100)  # 统一化设计
# pay(a1,200)
# w1 = Wechat()
# pay(w1,500)

# 用处: 在工作中,如果你要是规定几个类必须有一样的方法,
# 你要抽象类,制定一个规范,强制其有此方法.
# python没有多态的概念,但是python崇尚鸭子类型.
# 定义变量的方法:
#1,java c# 需要定义 类型. int i= 3
#2,java c# 没有多继承的概念.
# i = 1
# i = 'alex'
# 鸭子类型: 它看着像鸭子,那么他就是鸭子.

# str  list  tuple
str.index()
s1 = 'alex'
class Str:
    def index(self):
        pass

class List:
    def index(self):
        pass

class tuple:
    def index(self):
        pass
#python中好多不同类但同名的方法不是强制规定,而是约定俗成,像上面这三种类,都同样据有index方法,而且功能相似,
# 则 他们三个互称为鸭子.

posted @ 2018-07-02 16:19  mike1607  阅读(84)  评论(0)    收藏  举报