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

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

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

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

from collections import defaultdict

current = {
    'a': 1,
    'b': 2,
    'c': 3,
}

add_to_current = {
    'f': 4,
    'e': 5,
}


def increment():
    count = 0

    def missing():
        nonlocal count
        count += 1
        return 0

    result = defaultdict(missing, current)
    for key, val in add_to_current.items():
        result[key] += count

    return count, result


count, 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.dtcms.com/a/1305.html

相关文章:

  • 【送书活动】大模型赛道如何实现华丽的弯道超车
  • 【基于Cocos Creator 3.5的赛车游戏】8.引入触摸屏幕事件并简单的控制小车
  • 为什么要使用设计模式,以及使用设计模式的好处
  • springboot(40) : 数据断流告警
  • redis--windows配置--redis基础
  • 网络安全(黑客)自学
  • 网络基础-应用层协议-HTTP/HTTPS
  • 算法训练 第二周
  • SpringMvc 之crud增删改查应用
  • [论文笔记]RE2
  • 电脑死机的时候,CPU到底在做什么?
  • CSS3技巧36:backdrop-filter 背景滤镜
  • (图论) ——【Leetcode每日一题】
  • 外包干了2个月,技术退步明显了...
  • 为什么选择C/C++内存检测工具AddressSanitizer?如何使用AddressSanitizer?
  • 第5篇 vue的通信框架axios和ui框架-element-ui以及node.js
  • 关于老项目从JDK8升级到JDK17所需要注意的细节
  • 推荐书目:Python从入门到精通(文末送书)
  • 第25节-PhotoShop基础课程-文本工具组
  • 14:00面试,14:06就出来了,问的问题有点变态。。。
  • 盲打键盘的正确指法指南
  • Bash常见快捷键
  • 2023年会展行业研究报告
  • thinkPhp5返回某些指定字段
  • Postman应用——接口请求(Get和Post请求)
  • C++中的auto是一个关键字,用于在编译时自动推导变量的类型
  • 动态规划问题
  • Python的pandas库来实现将Excel文件转换为JSON格式的操作
  • 联发科3纳米芯片预计2024年量产,此前称仍未获批给华为供货
  • 怎么把两首歌曲拼接在一起?