Python 重写内置类型方法
在“fluent_python”的继承一章中,它演示了一个替代重写内置类型的示例Python 重写内置类型方法,python,python-3.x,Python,Python 3.x,在“fluent_python”的继承一章中,它演示了一个替代重写内置类型的示例 In [50]: class AnswerDict2(collections.UserDict): ...: def __getitem__(self, key): ...: return 42 ...: 它按照作者的意图正常工作 In [60]: ad = AnswerDict2(a="foo") In [61]: ad["a"] Out[61]: 42
In [50]: class AnswerDict2(collections.UserDict):
...: def __getitem__(self, key):
...: return 42
...:
它按照作者的意图正常工作
In [60]: ad = AnswerDict2(a="foo")
In [61]: ad["a"]
Out[61]: 42
In [62]: d = {}
In [63]: d.update(ad)
In [64]: d
Out[64]: {'a': 42}
但是,ad的原始版本仍然没有被推翻:
In [65]: ad
Out[65]: {'a': 'foo'}
怎么可能:
In [65]: ad
Out[65]: {'a': 42}
您可以替代
\uuuu init\uuuu
方法:
import collections
class AnswerDict2(collections.UserDict):
def __init__(self, **kwargs):
super().__init__(**kwargs)
for key in kwargs:
self[key] = 42
以便:
ad = AnswerDict2(a="foo")
print(ad)
将输出:
{'a': 42}