多继承 函数重写 迭代器

用于类的函数

  issubclass(cls, class_or_tuple) 判断一个类是否继承自其它类,如果此cls 是class 或tuple中的一个派生子类,则返回True, 否则返回False

 

示例:

  class A:

      pass

 

  class B(A):

      pass

 

  class C(B):

      pass

 

  issubclass(C, B)  # True

  issubclass(B, C)  # False

  issubclass(C, (int, str))  # False

  issubclass(C, (int, B, str))  # True

 

 

封装 enclosure

  封装是指隐藏类的实现细节,让使用者不关心这些细节

  封装的目的是让使用者通过尽可能少的方法(或属性)操作对象

 

 

私有属性和方法

  python类中以双下划线('__') 开头,不以双下划线结尾的标识符为私有成员,私有成员或只能用类内的方法进行访问和修改

    以__开头的实例变量有私有属性

    以__开头的方法为私有方法

多态 polymorphic

  什么是多态:

    字面意思: 多种状态

    多态是指在有继承/派生关系的类中,调用基类对象的方法,实际能调用子类的覆盖方法的现象叫多态

 

  状态:

    静态(编译时状态)

    动态(运行时状态)

  说明:

    多态调用方法与对象相关,不与类相关

    Python的全部对象都只有"运行时状态(动态)", 没有"C++语言"里的"编译时状态(静态)"

  示例:

   poly.py

 

面向对象的语言的特征:

  继承

  封装

  多态

 

多继承 multiple inheritance

  多继承是指一个子类继承自两个或两个以上的基类

语法:

  class 类名(基类名1, 基类名2, ...):

      ...

说明:

  1. 一个子类同时继承自多个父类,父类中的方法可以同时被继承下来

  2. 如果两个父类中有同名的方法,而在子类中又没有覆盖此方法时,调用结果难以确定

 

示例见:

  multi_inherit.py

 

多继承的问题(缺陷)

  标识符(名字空间)冲突的问题

    要谨慎使用继承

  示例见:

    multi_inherit2.py

 

 

多继承的 MRO (Method Resolution Order) 问题

  类的 __mro__ 属性

    此属性用来记录类的方法查找顺序

   

 

  示例见:

    mro.py

 

 

 

 

 

 

 

 

函数重写

  在自定义类内添加相应的方法,让自定义类创建的实例能像内建对象一样进行内建函数操作

 

对象转字符串函数:

  repr(obj)  返回一个能代表此对象的表达式字符串,通常

      eval(repr(obj)) == obj  (这个字符串通常是给python解释执行器运行用的)

 

  str(obj)  通过给定的对象返回一个字符串(这个字符串通常是给人阅读的)

 

 

对象转字符串函数的重写方法

  repr(obj) 函数的重写方法:

      def __repr__(self):

 

  str(obj) 函数的重写方法:

      def __str__(self):

 

  说明:

    1. str(obj) 函数先查找, obj.__str__()方法,调用此方法并返回结果

    2. 如果没有obj.__str__()方法时,则返回obj.__repr__()方法的结果并返回

    3. 如果obj.__repr__方法不存在,则调用object类的__repr__实例方法显示<__main__.XXXX object at 0xAABBCCDD>格式的字符串

  示例见:

    mynumber.py

 

其它内建函数的重写方法:

  __abs__       abs(obj)  函数

  __len__       len(obj)  函数(必须返回整数)

  __reversed__  reversed(obj) 函数(必须返回可迭代对象

  __round__     round(obj)  函数

 

示例见:

  myinteger.py

 

 

 

数值转换函数的重写

  __complex__  complex(obj) 函数

  __int__      int(obj) 函数

  __float__    float(obj) 函数

  __bool__     bool(obj) 函数

 

示例见:

  mynumber3.py

 

 

布尔测试函数重写

  格式:

    __bool__

  作用:

    用于bool(obj) 函数取值

    用于if语句的真值表达式中

    用于while 语句的真值表达式中

  说明:

    1. 当自定义的类内有 __bool__(self) 方法时,以此方法的返回值作为bool(obj) 的返回值

    2. 当不存在__bool__(self) 方法时,bool(x) 返回__len__(self) 方法的返回值是否为零来测试布尔值

    3. 当不存在__len__(self) 方法时,则直接返回True

  示例见:

    bool.py

 

 

迭代器(高级)

 

什么是迭代器

  可以通过next(it)函数取值的对象就是迭代器

 

迭代器协议

  迭代器协议是指对象能够使用next函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定

 

迭代器协议实现方法:

  __next__(self) 方法来实现迭代器协议

 

语法形式:

  class MyIterator:

      def __next__(self):

          迭代器协议

          return 数据

什么是可迭代对象:

  是指能用iter(obj) 函数返回迭代器的对象(实例)

  可迭代对象内部需要定义__iter__(self) 方法来返回迭代器对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值