当前位置: 首页 > news >正文

【Effective Python】读书笔记-05类与接口

1. 让组合起来的类来实现多层结构,不用使用嵌套的内置类型

2. 让简单的接口接收函数,而不是类的实例

from collections import defaultdictcurrent = {'a': 1,'b': 2,'c': 3,
}add_to_current = {'f': 4,'e': 5,
}def increment():count = 0def missing():nonlocal countcount += 1return 0result = defaultdict(missing, current)for key, val in add_to_current.items():result[key] += countreturn count, resultcount, result = increment()print(count, result)

某个类如果定义了__call__特殊方法,那么它的实例就可以像普通的 Python 函数那样调用。

3. 通过@classmethod 多态来构造同一体系中的各类对象

解决的问题:构造对象的办法不够通用

4. 通过 super 初始化超类

super 能够确保菱形继承体系中的共同超类只初始化一次

5. 考虑用 mix-in 类来表示可组合的功能

不实现__init__方法的类?

6. 优先考虑用 public 属性表示应受保护的数据,不要用 private 属性表示

如果子类中需要用到超类的属性,又不希望对外暴露,考虑申明为保护属性
只有一种情况应该是有私有属性,即避免命名冲突。

7. 自定义的容器类型应该从 collections.abc 继承

python 内置的 collections.abc 模块定义了一系列抽象基类(abstract base class),把每种容器类型应该提供的所有常用方法都写了出来。我们只需要从这样的抽象基类里面继承就好。同时,如果忘了实现某些必备的方法,那么程序会报错,提醒我们这些方法必须实现。

http://www.lryc.cn/news/168429.html

相关文章:

  • 【办公自动化】用Python在Excel中查找并替换数据(文末送书)
  • python学习随笔3
  • 《TCP/IP网络编程》阅读笔记--epoll的使用
  • Python 递归函数
  • Java实现计算两个日期之间的工作日天数
  • CS5817规格书|CS5817芯片参数|多功能便携式显示器方案芯片规格
  • 2023面试知识点一
  • 【算法题】2856. 删除数对后的最小数组长度
  • Java面向对象编程
  • K8S:Yaml文件详解及编写示例
  • 去耦电路设计应用指南(一)MCU去耦设计介绍
  • 【c++】杂记
  • 简记:使用 Django Shell 清空 数据库表
  • Web项目测试
  • Springboot 集成 Ehcache 提示 Cannot find cache named ‘employee_all‘ for Builder
  • pandas 笔记:shift
  • 解密(2023寒假每日一题 20)
  • 如何实现Web应用、网站状态的监控?
  • 手撕排序之堆排序
  • 【奇想星球】重磅!我们的AIGC共创社区平台上线了!
  • 2023年数维杯数学建模B题节能列车运行控制优化策略求解全过程文档及程序
  • Python--测试代码
  • CentOS 系列版本搭建 Nginx 服务
  • 目标检测YOLO实战应用案例100讲-基于机器视觉的输电线路小目标检测和缺 陷识别(下)
  • argparse--命令行参数解析库
  • elasticsearch4-文档操作
  • 阿里云服务器上CentOS 7.6使用rpm包安装MySQL 8.0.31
  • redis未授权漏洞
  • 详解3dMax中渲染线框的两种简单方法
  • Git - Git 工作流程