Fluent Python笔记二

第四部分 面向对象

  1. 对象和变量
  2. ==和is, ==能够被重载(__eq__()),is不能。
  3. 浅复制:工厂函数, 切片, copy.copy。
    深复制:copy.deepcopy
  4. 引用传参(共享传参)。
  5. 注意可变参数作为默认值时,存在method.__defaultes__中。
  6. 对象引用计数归零时回收内存。通过del删除引用,或者变量重新赋值使原来对象失去引用。
  7. __str_____repr___, str找不到会去找repr。
  8. https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods 讲解了普通method、staticmethod、classmethod、abstractmethod
  9. staticmethod:没有用到self自身实例的方法,类似于普通顶级函数,但在类中,能够被子类使用或重写。
  10. classmethod:用于工厂方法,返回实例;可调用类静态方法且能够在子类中运行良好(在调用的方法中,类名用self替代,self.classmethod)。
  11. __slots__ 子类需要重新定义。
  12. slice.indices()
  13. __getattr__只会在找不到属性时执行,实例属性->类属型->父类->`__getattr__方法。
  14. `__setattr__设置属性。
  15. 散列值hash()。通过映射归约 map 获取各元素的散列值列表 -> reduce 聚合(xor)所有散列值。
  16. zip、zip_longest
  17. 协议? 容器协议 __contains__ 迭代协议__iter__
  18. 运行时实现协议(如动态的给实例对象赋值__getitem__方法)
  19. 抽象基类
  20. @abstractmethod放在最底层,与def间不能有任何其他装饰器。

    class A(abc.ABC):
     @classmethod
     @abc.abstractmethod
     def abstract_classmethod(cls):
       pass
  21. 虚拟子类在任何时候(导入和实例化)都不会检查是否符合抽象基类的接口,为了在运行时避免错误,需要实现所需的全部方法。
  22. 注册虚拟子类@cls.register或者cls.register(subclass)
  23. 继承内置类型会有很多麻烦(部分方法会跳过覆盖的方法,如dict的__init__get()update()),可以选择继承UserList,UserDict等
  24. 继承时,遵循方法解析顺序通过类属性__mro__或mro()查看。
  25. 利用cls.method(self)可以跳过mro,并指定想要的父类方法。
  26. 不能重载内置类型运算符,不能新建运算符,某些运算符不能重载(is、not、and、or)。
  27. +一元取正__pos__、-一元取负__neg__、~按位取反__invert__
  28. +加法运算符__add__、*乘法运算符__mul__
  29. 比较运算符
  30. +=运算符__iadd__、*=运算符__imul__。若不存在,a += b 实际就是 a = a + b
  31. 不可变类型一定不能实现就地特殊方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值