您没有在示例中使用位置参数。所以相关代码是:
class attrdict(dict):
def __init__(self, **kwargs):
dict.__init__(self, **kwargs)
self.__dict__ = self
在第一行中,您将 class 定义attrdict
为dict
. 在第二行中,您定义了自动初始化您的实例的函数。您将关键字参数 ( **kargs
) 传递给此函数。当你实例化a
:
a = attrdict(x=1, y=2)
你实际上是在打电话
attrdict.__init__(a, {'x':1, 'y':2})
dict 实例核心初始化是通过初始化dict
内置超类来完成的。这是在第三行传递接收到的参数完成的 attrdict.__init__
。因此,
dict.__init__(self,{'x':1, 'y':2})
使self
(实例a
)成为字典:
self == {'x':1, 'y':2}
好消息出现在最后一行:每个实例都有一个保存其属性的字典。这是self.__dict__
(即a.__dict__
)。
例如,如果
a.__dict__ = {'x':1, 'y':2}
我们可以分别写a.x
ora.y
和获取值 1 或 2。
所以,这就是第 4 行的作用:
self.__dict__ = self
相当于:
a.__dict__ = a where a = {'x':1, 'y':2}
然后我可以调用a.x
and a.y
。
希望不要太乱。