为什么这个python类打印出我的kwargs?

时间:2011-07-17 06:33:52

标签: python oop

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的字典,当我期待一个空字典......

5 个答案:

答案 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}