当前位置: 首页 > 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),把每种容器类型应该提供的所有常用方法都写了出来。我们只需要从这样的抽象基类里面继承就好。同时,如果忘了实现某些必备的方法,那么程序会报错,提醒我们这些方法必须实现。

相关文章:

  • 【送书活动】大模型赛道如何实现华丽的弯道超车
  • 【基于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就出来了,问的问题有点变态。。。
  • 人物|德国新外长关键词:总理忠实盟友、外交防务专家、大西洋主义者
  • 软硬件企业集中发布未成年人模式使用手册
  • 海量数据处于“原矿”状态,数据价值释放如何破局?
  • 总书记考察的上海“模速空间”,是一个怎样的空间?
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议
  • 人民日报评论员:汇聚起工人阶级和广大劳动群众的磅礴力量