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

在“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 [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}