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 函数那样调用。
解决的问题:构造对象的办法不够通用
super 能够确保菱形继承体系中的共同超类只初始化一次
不实现__init__
方法的类?
如果子类中需要用到超类的属性,又不希望对外暴露,考虑申明为保护属性
只有一种情况应该是有私有属性,即避免命名冲突。
python 内置的 collections.abc 模块定义了一系列抽象基类(abstract base class),把每种容器类型应该提供的所有常用方法都写了出来。我们只需要从这样的抽象基类里面继承就好。同时,如果忘了实现某些必备的方法,那么程序会报错,提醒我们这些方法必须实现。