面向对象之多态

鸭子类型

  我们都知道面向对象的语言有三大特性:封装、继承和多态,在这里我浅谈一下python的多态

 1 class PageOne:
 2     def status(self):
 3         return "按期申报页"
 4 
 5 
 6 class PageTwo:
 7     def status(self):
 8         return "其他申报页"
 9 
10 
11 class PageThree:
12     def status(self):
13         return "申报信息查询页"
14 
15 
16 def func(obj):
17     print(obj.status.__call__())
18 
19 
20 if __name__ == '__main__':
21     func(PageOne())
22     func(PageTwo())
23     func(PageThree())

output:  

  按期申报页
  其他申报页
  申报信息查询页

总结:

  1、python的多态而表现出的编程特色称之为鸭子类型

  2、不同的实例调用同一个接口而表现出不同的形态

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:面向对象之多态 - Python技术站

(0)
上一篇 2023年4月2日 下午4:45
下一篇 2023年4月2日

相关文章

  • 编程思想

    三大编程思想:   POP:面向过程编程(Procedure Oriented Programming)   OOP:面向对象编程(Object Oriented Programming)   AOP:面向切面编程(Aspect Oriented Programming) 以下大部分内容引用腾讯云一位笔者,我也是进一步了解纯记录之目的。 POP ​   面向…

    Python开发 2023年4月2日
    00
  • 命名元组

    1、命名元组也叫具名元组   可以通过名称来访问序列中的元素,摆脱对位置的依赖,他本身是一个工厂函数 2、应用1   实例化元组返回的类,其内存占用要比普通类实例要小的多,因为前者实例的属性不通过字典进行管理 1 from collections import namedtuple 2 3 # 返回可实例化的类 4 P = namedtuple(“人”, […

    Python开发 2023年4月2日
    00
  • 线程锁在单例模式中的应用

    多个线程在执行过程中会因为竞争同一个资源而产生线程冲突,造成死锁,从而引出线程锁这个概念 先拿到锁再执行业务操作: 当然我对这一块了解的还不透彻,只是了解在不加锁的多线程情况下,会破坏单例模式,所以就有了下面这一段 1 import time 2 import threading 3 4 5 def decorator(func): 6 lock = thr…

    Python开发 2023年4月2日
    00
  • __slots__

      在类的层次上定义时,python给实例采用一种更加紧凑的内部表示来管理属性,而非字典,这样,我们只被允许访问__slots__内部的属性   这样定义会带来两点好处,然后具体的实践我在工作中目前运用的还很少,后面如果发现还有什么坑,我再来补充 1、创建大量实例时节省内存 2、访问属性快 1 class Valley: 2 __slots__ = “nam…

    Python开发 2023年4月2日
    00
  • 多组合少继承

    继承:   强调类与类之间的关系 组合:   强调对象和对象之间的关系 清楚python支持多继承,从而涉及到一些MRO的点,这里不做赘述,在实际工作过程中,我们经常会使用继承来实现代码复用,如果仅仅是为了复用,还是比较推荐使用组合方式,因为继承方式,使得类与类之间的耦合性变得异常紧密,这多少违背了迪米特法则 1 “”” 2 OOP中三大特性之一:继承 3 …

    Python开发 2023年4月2日
    00
  • 钩子函数

    控制子类的的创建 1、元类   这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式 2、钩子函数   __init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属性的增加及修改 1 class Meta: 2 de…

    Python开发 2023年4月2日
    00
  • pyqt入门

      第一次接触pyqt是在20年刚毕业的时候,时隔两年,恰逢闲暇,正好回过头来对这个模块的知识进行一个整理,不会做系统化的整理,我打算可能会围绕之前做过的小工具对其涉及到的控件、信号和槽等知识进行简单的回忆。后面工作如果再涉及或者想到其他的,会再回来更新完善。   pyqt5:同前面整理的kivy一样,同属于GUI开发框架的范畴,不同的是,pyqt用于桌面应…

    2023年4月2日
    00
  • 状态机的实现

    代码里我们经常会出现大量的条件判断,在这种情况下,我们可以实现状态机避免过度使用 有一种方式是把各种状态归为各种状态类 还有一种方式是修改实例的__class__属性 1 “”” 2 状态机的实现 3 修改实例的__class__属性 4 “”” 5 6 7 class Connection: 8 def __init__(self): 9 self.new…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部