python定义接口_python接口类 - zhujun2017的个人空间 - OSCHINA - 中文开源技术交流社区...

1开发原则(七大原则)

一:开放封闭原则

二:接口隔离原则(将不同接口对象一一展现出来,分别调用各自的接口,完成各自的功能)

三:依赖倒置原则

高级模块不能依赖低级模块,可以依赖抽象

规范的定义:

高层模块不应该依赖低层模块,两者都应该依赖抽象

抽象不应该依赖细节

细节应该依赖抽象

自己的理解(抽象也就是将相同方法定义出来,方便调用)

2 在开发的时候要遵循设计模式,和开发原则

3 在Python里,没有接口的概念,在Java里才有接口的概念,但是可以通过继承abc模块来实现接口的功能

例题1  :正常情况下调用一个类

classPayment(metaclass=ABCMeta): #规范

@abstractmethod

defpay(self,money):

'''

:param money:

:return:

'''

raiseNotImplementedError

classApplePay(Payment):# 100

defpay(self,money):passapp = ApplePay()

app.pay("我是参数")

解释:定义一个类,然后调用一个类

例题2:为了避免没有使用接口类含有的方法,方面测试人员检查是否调用接口

fromabc importABCMeta,abstractmethod

# 接口类 : 接口类就是一个规范 接口类一般是项目设计人员写好的

classPayment(metaclass=ABCMeta): #规范

@abstractmethod

defpay(self,money):

'''

:param money:

:return:

'''

raiseNotImplementedError

# class ApplePay(Payment):# 100

# def pay(self,money):pass

# app = ApplePay()

# app.pay("我是参数")

# 微信支付

classWeChatPay(Payment):

defpay(self,money):

print('通过微信支付了%s元钱'%(money))

# 支付宝支付

classAliPay(Payment):

defpay(self,money):

print('通过支付宝支付了%s元钱'%(money))

# apple pay

classApplePay(Payment):

defpay(self,money):

print('通过支付宝支付了%s元钱' % (money))

wp = WeChatPay()

alp = AliPay()

app = ApplePay()

defpay(pay_obj,money): # 程序的归一化设计

pay_obj.pay(money)

pay(alp,100)

pay(wp,100)

pay(app,100)

打印结果:

通过支付宝支付了100元钱

通过微信支付了100元钱

通过支付宝支付了100元钱

注意:即执行了各个方法,又检测了是否调用了这个接口。

例题3  天鹅,企鹅,鸟 使用接口离原则(接口类)

使用多个单一的接口,不使用单一的总接口。

fromabc importABCMeta,abstractmethod

classFlyAnimal(metaclass=ABCMeta):

@abstractmethod

deffly(self):

print(11111)

classSwimAnimal(metaclass=ABCMeta):

@abstractmethod

defswim(self): pass

classWalkAnimal(metaclass=ABCMeta):

@abstractmethod

defwalk(self): pass

classSwan(SwimAnimal,WalkAnimal,FlyAnimal):

# 飞

deffly(self):pass# 游泳

defswim(self):pass# 走

defwalk(self):pass

classQq(SwimAnimal,WalkAnimal):

defswim(self):pass# 走

defwalk(self):pass

classBird(FlyAnimal,WalkAnimal):

# 飞

deffly(self):pass# 走

defwalk(self):pass

Swan()

# 接口类不能被实例化

注释:swan,qq,bird,分别调用他们自身需要的接口,接收属性,不需要的不接收

接口类不能实例化

例子4:抽象类

# 抽象类 规范一个类的类

# 在python里 抽象类和接口类 没区别

# word文档是文件

# excle是文件

# ppt是文件

fromabc importABCMeta , abstractmethod

classFile(metaclass=ABCMeta):

@abstractmethod

defread(self):

f = open('file','r')

self.f = f

@abstractmethod

defwrite(self):

f = open('file','w')

classWord(File):

defread(self):

# 打开一个文件

# 读文件

# 关闭一个文件

super().read()

self.f.read()

self.f.close()

classExcle(File):

defread(self):

# 打开一个文件

# 读某一列 读某一列

# 关闭一个文件

super().read()

self.f.readline()

self.f.close()

classPPT(File):

defread(self):

# 打开一个文件

# 读文字 读表格 读图片

# 关闭一个文件

super().read()

self.f.readpicture()

self.f.close()

注释:

在java里 有区别

java的接口规定里面的方法一定不能实现(一句代码也不能写)

抽象类 单继承

无论接口类 还是抽象类 其实都是一种面向对象编程的开发规范

只是在接口类或者抽象类中 去约束继承它的子类必须实现某些方法

对于java代码来说:如果发生多继承 那么一定是接口类 且里面的方法都不能实现

如果在方法里有了实现 那么一定是单继承 的抽象类

但是对于python来说 就没有这些约束

因为python没有接口的概念

对于类的继承 没有多继承的限制

实际上abc模块是帮我实现抽象类的方法,只是我们用它来模仿接口类的效果了

在python中,只要metaclass = ABCMeta 定义了抽象方法(@abctractmethod)

这个类就不能被实例化

你可以说他是一个抽象类

多态与鸭子类型:

多态比鸭子类型多了一个抽象类(将不同类的同一个属性抽离出来)。

多态:

importabc

classAnimal(metaclass=abc.ABCMeta): #同一类事物:动物

@abc.abstractmethod

deftalk(self):

pass

classPeople(Animal): #动物的形态之一:人

deftalk(self):

print('say hello')

classDog(Animal): #动物的形态之二:狗

deftalk(self):

print('say wangwang')

classPig(Animal): #动物的形态之三:猪

deftalk(self):

print('say aoao')

peo=People()

dog=Dog()

pig=Pig()

#peo、dog、pig都是动物,只要是动物肯定有talk方法

#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用

peo.talk()

dog.talk()

pig.talk()

#更进一步,我们可以定义一个统一的接口来使用

deffunc(obj):

obj.talk()

注释:多态就是因为他们有相同的属性,类调用时候不会报错

鸭子:他们的属性都相同,就是一个鸭子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值