【Python】重要知识点

重要知识点

super() 函数 —— 调用父类方法

8.7 调用父类方法 — python3-cookbook 3.0.0 文档

常见用法

  1. 用父类(超类)的一个方法
  2. init() 方法中确保父类被正确的初始化
  3. init() 方法中确保父类被正确的初始化

多继承中可能出现的错误用法

class Base:
    def __init__(self):
        print('Base.__init__')

class A(Base):
    def __init__(self):
        Base.__init__(self) # 单继承没问题
        print('A.__init__')
class C(A,B): # 多继承中 __init__两次
    def __init__(self):
        A.__init__(self)
        B.__init__(self)
# 换用super().__init__() 
        print('C.__init__')

原理 —— Python是如何实现继承的

  1. 对于定义的每一个类,Python会计算出一个方法解析顺序(MRO)列表。 这个MRO列表就是一个简单的所有基类的线性顺序表。例如:
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>,
<class '__main__.Base'>, <class 'object'>)
>>>
  1. 为实现继承,在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止
  2. MRO列表的构造 —— 合并所有父类的MRO列表并遵循如下三条准则:
  • 子类会先于父类被检查
  • 多个父类会根据它们在列表中的顺序被检查
  • 如果对下一个类存在两个合法的选择,选择第一个父类

进程池和线程池

一篇文章浅析Python自带的线程池和进程池 - 知乎 (zhihu.com)
python线程池 ThreadPoolExecutor 的用法及实战 - 知乎 (zhihu.com)

迭代器和生成器

Python迭代器和生成器详解 - 知乎 (zhihu.com)

总结

  1. 可迭代对象(Iterable)是实现了__iter__()方法的对象,通过调用iter()方法可以获得一个迭代器(Iterator)。
  2. 迭代器(Iterator)是实现了__iter__()方法和__next()__方法的对象。
  3. for...in...的迭代实际是将可迭代对象转换成迭代器,再重复调用next()方法实现的。
  4. 生成器(Generator)是一个特殊的迭代器,它的实现更简单优雅。
  5. yield是生成器实现__next__()方法的关键。它作为生成器执行的暂停恢复点,可以对yield表达式进行赋值,也可以将yield表达式的值返回。
  6. yield就是return返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。
  7. next方法和send方法都可以返回下一个元素,区别在于send可以传递参数给yield表达式,这时传递的参数会作为yield表达式的值,而yield的参数是返回给调用者的值。
posted @ 2023-08-21 23:27  Mothlove  阅读(4)  评论(0编辑  收藏  举报