pyhton面向对象接口的实现
pyhton中的接口没有像java和go那样严格,你要实现这个接口就必须要实现这个接口下的所有方法,python只能算是一个规范约束接口的定义
声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能
引入支付宝和微信都可以付钱,class Alipay: """ 支付宝支付 """ def pay(self,money): print("支付宝支付了%s元"%money) class Applepay: """ apple pay支付 """ def pay(self,money): print("apple pay支付了%s元"%money) def pay(payment,money): """ 支付函数,总体负责支付 对应支付的对象和要支付的金额 """ payment.pay(money) p = Alipay() pay(p,200)
开发中容易出现的问题
大家都是支付,因为叫法不一样导致不通用class Alipay: """ 支付宝支付 """ def pay(self,money): print("支付宝支付了%s元"%money) class Applepay: """ apple pay支付 """ def pay(self,money): print("apple pay支付了%s元"%money) class Wechatpay: def fuqian(self,money): """ 实现了pay的功能,但是名字不一样 """ print("微信支付了%s元"%money) def pay(payment,money): """ 支付函数,总体负责支付 对应支付的对象和要支付的金额 """ payment.pay(money) p = Wechatpay() pay(p,200) #执行会报错接口初成:手动报异常:NotImplementedError来解决开发中遇到的问题
如果你想实现支付这个功能, 那么必须要实现pay这个方法,算是一种约束class Payment: def pay(self): raise NotImplementedError class Wechatpay(Payment): def fuqian(self,money): print("微信支付了%s元"%money) p = Wechatpay() #这里不报错 pay(p,200) #这里报错了借用abc模块来实现接口from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self,money): pass class Wechatpay(Payment): def fuqian(self,money): print("微信支付了%s元"%money) p = Wechatpay() #不调就报错了
接口继承实质上是要求"做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁的处理实现了特定接口的所有对象"——这在程序设计上,叫做归一化。
归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合——就好象linux的泛文件概念一样,所有东西都可以当文件处理,不必关心它是内存、磁盘、网络还是屏幕(当然,对底层设计者,当然也可以区分出"字符设备"和"块设备",然后做出针对性的设计:细致到什么程度,视需求而定)。 依赖倒置原则: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程
在python中根本就没有一个叫做interface的关键字,上面的代码只是看起来像接口,其实并没有起到接口的作用,子类完全可以不用去实现接口接口提取了一群类共同的函数,可以把接口当做一个函数的集合。 然后让子类去实现接口中的函数。 这么做的意义在于归一化,什么叫归一化,就是只要是基于同一个接口实现的类,那么所有的这些类产生的对象在使用时,从用法上来说都一样。 归一化,让使用者无需关心对象的类是什么,只需要的知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度。 比如:我们定义一个动物接口,接口里定义了有跑、吃、呼吸等接口函数,这样老鼠的类去实现了该接口,松鼠的类也去实现了该接口,由二者分别产生一只老鼠和一只松鼠送到你面前,即便是你分别不到底哪只是什么鼠你肯定知道他俩都会跑,都会吃,都能呼吸。 再比如:我们有一个汽车接口,里面定义了汽车所有的功能,然后由本田汽车的类,奥迪汽车的类,大众汽车的类,他们都实现了汽车接口,这样就好办了,大家只需要学会了怎么开汽车,那么无论是本田,还是奥迪,还是大众我们都会开了,开的时候根本无需关心我开的是哪一类车,操作手法(函数调用)都一样 为何要用接口
热木星黑暗面首次揭开美国麻省理工学院的天文学家获得了一颗系外行星被潮汐锁定在其恒星上的永久暗面的图片,这是迄今为止最清晰的一张图像。该研究提供了系外行星大气的第一个详细视图。相关研究结果2月21日发表
海信发布冰箱智趣链接真空方案2月22日,海信冰箱发布了以智趣链接真空新鲜不止一面为主题的智趣食材管理方案。方案通过智趣科技与真空保鲜技术的融合,解决消费者痛点。随着5GAIIot等高新技术的广泛渗透,对于家电
一部手机能用多久?这几点是影响手机寿命的关键,看懂不花冤枉钱对于这个问题相信大家都会有疑问,毕竟电子产品是有使用寿命的。但是不同产品不同规格不同人使用手机的使用都是有区别的。但是影响手机使用寿命的点是一致的,今天妖妖就总结一下影响手机使用寿
发力科技研发创新,山东要放大招了今年,省级科技创新发展资金将再增长10,达到145。2亿元,是2018年的4。5倍启动省基础研究十年行动,组织实施100项左右重大科技创新工程项目对新升级的国家级创新平台,符合条件
本地京东到家商城系统定制开发源码多用户商城方案简介随着当前社会的不断发展,传统电商服务逐渐向新零售领域发展。近年来,实体零售业经营状况不佳,销量下滑明显,传统门店渐渐沦为陈列室,即便客流量大,但经营上却不见起色。
2022春招季大厂收缩,打工人下沉核心提示不再为了工作而工作,觉得不合适立马走人,即使待业也不会选择屈就,直到找到下一个满意的的岗位,新一代年轻人的求职观,也成为招聘APP玩家的新机会。今年春节里,就开始有人投简历
混合云,云计算的后浪混合云的十大趋势混合云,云计算的后浪。据市场统计,到2022年,全球超过90的企业将依赖本地专用私有云多个公共云和传统平台的组合来满足其基础设施需求。以下是关于混合云的10个趋势。
Numpy的各种下标操作目录技术背景二维矩阵的取法取单行和单个元素下标的list和tuple格式区分冒号的使用现存的list与numpy。array不相兼容的取法两个冒号的组合用法用None作扩维高维矩阵
大厂瓜田脉脉,要做职场版大众点评?2月23日,有消息称字节跳动员工猝死两天前,微博大面积裁员的传闻四起。这两件事有一个共同点,都是先在脉脉上出现蛛丝马迹,随后迅速引爆,点燃舆情。不知从何时起,有关互联网公司的大瓜,
数字巨头不惧反垄断?互联网反垄断难在哪?2022年1月5日,新年伊始,国家市场监督管理总局便在其官网公布了对腾讯阿里巴巴及哔哩哔哩等互联网企业的13份行政处罚决定书。业界普遍认为,监管总局开出的2022年首张反垄断罚单,
滴滴是合法的,滴滴司机永远是违法的,如何评价这句话?滴滴平台只要取得经营许可证就是合法,但是滴滴司机却有两种,一种是非法营运,一种是合法营运。滴滴平台目前大部分城市滴滴都取得了网络预约出租汽车经营许可证有了这个证件说明滴滴平台已经获