class Meta(dict):
def __init__(self, indexed, method, *args, **kwargs):
super(Meta, self).__init__(*args, **kwargs)
print self
为什么要打印我的kwargs?
m = Meta(indexed='hello', method='distance', a='3', b='4')
当我运行它时,它打印出一个带有我的kwargs的字典,当我期待一个空字典......
答案 0 :(得分:4)
为什么当你通过调用dict类的初始化程序用关键字args显式初始化你的实例(一个dict子类)时,你是否希望self不包含你的关键字args?
答案 1 :(得分:3)
那是因为dict
类从传递给构造函数的关键字参数初始化其内容:
>>> dict(indexed='hello', method='distance', a='3', b='4')
{'a': '3', 'indexed': 'hello', 'b': '4', 'method': 'distance'}
由于您的类使用传递给自己的构造函数的关键字参数调用dict
的构造函数,因此字典确实被初始化并且观察到相同的行为。
答案 2 :(得分:1)
为什么不应该呢?该类从dict继承了相关的 str 和 repr 实现。
答案 3 :(得分:0)
构造函数中的语句print self
正在有效地打印你的kwargs。这是因为您从dict类继承的行为。 kwargs包含在字典商店中。
>>> d = dict(a=3, b=4)
>>> print d
{'a': 3, 'b': 4}
答案 4 :(得分:0)
因为你正在将它们传递给dict的初始化器。
试试:
>>> dict(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2}