1. 接口类
接口提取了一群类共同的函数,可以把接口当做一个函数的集合。
然后让子类去实现接口中的函数。
这么做的意义在于归一化,什么叫归一化,就是只要是基于同一个接口实现的类,这些类都应当实现接口类的定义的接口方法。
# java : 面向对象编程
# 设计模式 —— 接口
# 接口类 : python原生不支持
# 接口类不可以实例化
from abc import abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta): # 元类 默认的元类 type
@abstractmethod
def pay(self,money):pass # 没有实现这个方法
# 规范 :接口类可以
class Wechat(Payment):
def pay(self,money):
print("已经用微信支付了%s元"%money)
class Alipay(Payment):
def pay(self,money):
print("已经用支付宝支付了%s元" % money)
class Applepay(Payment):
def pay(self,money):
print("已经用applepay支付了%s元" % money)
def pay(pay_obj,money): # 统一支付入口
pay_obj.pay(money)
# wechat = Wechat()
# ali = Alipay()
app = Applepay()
# wechat.pay(100)
# ali.pay(200)
p = Payment()
2. 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。
#一切皆文件
import abc #利用abc模块实现抽象类
class All_file(metaclass=abc.ABCMeta):
all_type="file"
@abc.abstractmethod #定义抽象方法,无需实现功能
def read(self):
"子类必须定义读功能"
with open("filaname") as f:
pass
@abc.abstractmethod #定义抽象方法,无需实现功能
def write(self):
"子类必须定义写功能"
pass
class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print("文本数据的读取方法")
def write(self):
print("文本数据的读取方法")
class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print("硬盘数据的读取方法")
def write(self):
print("硬盘数据的读取方法")
class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print("进程数据的读取方法")
def write(self):
print("进程数据的读取方法")
wenbenwenjian=Txt()
yingpanwenjian=Sata()
jinchengwenjian=Process()
#这样大家都是被归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()
print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)
# 抽象类 : 规范
# 一般情况下 单继承 能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现
# 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中
# 抽象类还是接口类 : 面向对象的开发规范 所有的接口类和抽象类都不能实例化
# python
# python中没有接口类 :
# python中自带多继承 所以我们直接用class来实现了接口类
# python中支持抽象类 : 一般情况下 单继承 不能实例化
# 且可以实现python代码