今日内容大纲
01 抽象类,接口类
制定一个规范
02 多态
03 封装
抽象类,接口类
# from abc import ABCMeta,abstractmethod
#
#
# class Payment(metaclass=ABCMeta): # 抽象类(接口类):
# @abstractmethod
# def pay(self): pass # 制定了一个规范
# @abstractmethod
# def func(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 是对象名字
# obj.pay()
# w1 = Wechatpay(200)
# a1 = Alipay(200)
# j1 = Jdpay(100)
# pay(a1) # 归一化设计
# pay(j1)
#
# w1 = Wechatpay(300)
# w1.weixinpay()
---------------------抽象类,接口类----------------------
第一版
# 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()
#
# j1 = Jdpay(100)
# j1.pay()
各个支付类都是单独的,实例化对象之后,对象各自调用类中的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)
# j1 = Jdpay(100)
# pay(a1) # 归一化设计
# pay(j1)
各个类还是单独的,但是对于类内部的支付方法pay是统一的命名规则,在最终结尾出单独定义一个pay函数,其中个传递的参数是支付类实例化出来的对象.
但是其中对于只用同样的pay支付方法,并没有强制要求.
------------------第三版------------------------
# from abc import ABCMeta,abstractmethod #调用两个模块,并定义一个类,作为一个规范,并且后面的类继承这个类,
#
#
# class Payment(metaclass=ABCMeta): # 抽象类(接口类):
# @abstractmethod
# def pay(self): pass # 制定了一个规范
# @abstractmethod
# def func(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()
# w1 = Wechatpay(200)
# a1 = Alipay(200)
# j1 = Jdpay(100)
# pay(a1) # 归一化设计
# pay(j1)
#
# w1 = Wechatpay(300)
# w1.weixinpay()
--------------------鸭子类型-------------------------
# python没有多态?他有什么? 他有鸭子类型.
# 鸭子类型 : 看着像鸭子,他就是鸭子.
# 这些类 都互称为鸭子.
# class Str:
# def index(self):
# pass
# class List:
# def index(self):
# pass
#
# class Tuple:
# def index(self):
# pass
***比如说在str,List,Tuple这几个类型中,全部都含有index()这个方法,所以str,List,Tuple互相称伟鸭子类型.