Fluent Python 笔记四

来源:互联网 发布:开淘宝店进货渠道 编辑:程序博客网 时间:2024/06/11 04:48
  1. __getattr__
  2. 利用__new__创建对象
  3. @property和@name.setter
  4. 相当于name = property(fget, fset, fdel, doc)
  5. 新添的property类特性能够遮盖实例属性
  6. 实例属性不会遮盖类特性
  7. 利用property(fget, fset, fdel, doc)创建类特性工厂函数(改用描述符类更简洁易于扩展和继承)

    def quantity(name):    def fget(instance):        return instance.__dict__[name]    def fset(instance, value):        if value > 0:            instance.__dict__[name] = value  # 跳过特性        else:            raise ValueError('%s must > 0' % name)    return property(fget, fset)
  8. Python looks for special methods such as __getattr__ only in an object’s class, and not in the instances themselves.?????????

  9. __getattr____getattribute____delattr____setattr__
  10. __new__看作创建类的工厂方法(生成不同类型的对象或者返回事先生成好的对象)。
  11. 描述符__get____set____del__
  12. __set__(self, instance, value) self指描述符类实例,instance指托管类实例
  13. __get__(self, instance, owner)在owner为托管类类,当owner为空时(即类.属性时),返回描述符类本身self。
  14. 模板方法设计模式:抽象类:模板方法和抽象方法,其中模板方法中调用抽象方法获取结果,并实现其他相同业务。;实现类:实现抽象方法。23种设计模式(6):模版方法模式
  15. 覆盖型描述符(定义__set__)和非覆盖型描述符(无__set__
  16. 覆盖型描述符(实现__get__`__set__):实例和类的获取值和属性赋值操作都会触发这两个方法,不会被实例属性覆盖。
  17. 未实现__get__的覆盖型描述符:赋值触发__set__,但获取属性或被实例属性遮盖。
  18. 非覆盖性描述符(未实现__set__):
  19. 任何描述符都可以通过类属性来覆盖。
  20. 方法是非覆盖性描述符。
  21. 函数function变成绑定方法bound method,bound method有__self__属性,是调用这个方法的实例的引用;__func__属性是在托管类上的原始函数的引用;还有__call__方法,来调用__func__
  22. 类装饰器可能对子类无效。
  23. type是其自身的实例,object是type的实例,type是object的子类。
  24. 类都是object的子类,类都是type的实例
原创粉丝点击