首页 > 解决方案 > “class MyDict(dict): pass”的目的是什么,它与普通字典有什么不同?

问题描述

MyDict类有什么用,属性content有什么用?

class MyDict(dict):
       pass

company_settings_dict = instance.as_company_console_settings()
message = MyDict()
notification_type = "CompanyConsoleSettings"
data = {"data": company_settings_dict, "notification_type": "%s" % (notification_type), "is_new": False}
message.content = {"message": "%s" % (json.dumps(data)), "room": instance.company.id}

标签: pythondjangodictionary

解决方案


在最后一行,您分配给message.content.

这对于内置的dict.

>>> d = {}
>>> d.content = 1
[...]
AttributeError: 'dict' object has no attribute 'content'

事实上,字典甚至没有__dict__(显然)。

>>> vars(d)
[...]
TypeError: vars() argument must have __dict__ attribute

但是,您的自定义类型不会出现此类问题。

>>> class MyDict(dict):
...:    pass
...:
>>> d = MyDict()
>>> d.content = 0
>>> vars(d)
>>> {'content': 0}

如果你打算设计一个更复杂的子类dict,继承自collections.UserDict. 我已经在这个答案dict的最后部分列出了直接继承的一些问题。


推荐阅读