Skip to content

Latest commit

 

History

History
46 lines (39 loc) · 2.85 KB

File metadata and controls

46 lines (39 loc) · 2.85 KB
  1. 闭包是什么现象,有什么应用

    • 一个能记住嵌套作用域变量值的函数,尽管作用域已经不存在,即:闭包引用了自由变量,即使生成闭包的环境已经释放,闭包依然存在。
    • 闭包的三要素
      • 含有嵌套函数
      • 嵌套(内嵌)函数引用外部变量
      • 嵌套函数被返回
    • 应用
      • 运行时可以有多个实例,即使传入的参数相同
      • 模拟构造类
      • 实现偏函数的功能
  2. 可迭代对象和迭代器、生成器是什么区别

    • 可迭代对象Iterable,即有迭代能力的对象,实现了魔法函数__iter__通常该函数返回一个实现了__next__方法的对象,当然这个返回不是必须的;迭代器Iterator同时实现了__iter____next__
    • 迭代器是实现了next方法的可迭代对象。调用iter方法可以将可迭代对象变成迭代器,这个说法不准确,可迭代对象还是可迭代对象,是否为迭代器取决于调用iter()方法的返回结果。
    • 生成器都是迭代器,反之不成立。
  3. 描述符descriptor,属性property,函数(类)装饰器decorator之间的联系与区别

    • 描述符是@property,@classmethod,@staticmethod,super的底层实现机制
    • 一个类如果实现了__get__, __set__, __del__方法(不一定全部实现),并且该类的实例对象通常是另一个类的类属性,那么这个类就是一个描述符:即描述符是实现了特定协议的类
  4. 对象属性的查询优先级(访问顺序)是什么样子的

    • 从上到下依次是:__getattribute__()方法
    • 类、父类、祖先类的数据描述符(同时定义了__get____set__的描述符)
    • 实例对象的字典
    • 类的字典
    • 非数据描述符(仅定义了__get__的描述符)
    • 父类的字典
    • __getattr__()方法
  5. 如何定义一个只有方法的类

    • 设置类的__slots__属性为空集合
  6. Python中成员访问控制如何实现

    • 私有变量用双下划线开头,不允许访问,因为python中没有对此进行强制限制,依然可以通过obj._C__foo的方式访问私有变量
    • 保护变量用单下划线开头,不建议访问
  7. 对象的特殊只读属性有哪些

    • object.__dict__:一个字典或其他类型的映射对象,用于存储对象的(可写)属性
    • instance.__class__:类实例所属的类
    • class.__bases__:由类对象的基类所组成的元组
    • class.__mro__:由类组成的元组,在方法解析期间基于此查找基类
    • class.__subclasses__():返回一个由仍然存在的所有此类引用组成的列表
    • definition.__name__:类、函数、方法、描述器或生成器实例的名称

Filtered Reference