Python [name] = value意味着什么?

Cap*_*Rib 3 python django sequence

Python新手在这里.我正在阅读基于Django的Taiga项目的部分代码.我无法理解一行代码.

class Response(SimpleTemplateResponse):
    def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None):
        super().__init__(None, status=status)
        self.data = data
        self.template_name = template_name
        self.exception = exception
        self.content_type = content_type

        if headers:
            for name, value in six.iteritems(headers):
                self[name] = value
Run Code Online (Sandbox Code Playgroud)

我不太明白最后一行.self [name] = value.这究竟意味着什么?这会创造一个字吗?如果是,我如何调用此词典或在课堂外引用此词典?如果没有,它会做什么?

Bur*_*lid 5

Taiga以django为基础,django SimpleTemplateResponse来自哪里.它的子类HttpResponse是类似dict的对象.

现在,循环首先检查是否存在headers非None或False的名称.如果设置了,则假设它headers是一个字典,并用iteritems循环遍历字典的每个键/值对.然后,它会复制与类的属性相同的键和值self[name] = value.

实际上,这意味着如果有标题,则可以在类中直接访问它们作为键.

这是一个简单的例子:

>>> class MyFoo(object):
...     def __init__(self):
...         self._data = {}
...     def __setitem__(self, a, b):
...         self._data[a] = b
...     def __getitem__(self, a):
...         return self._data[a]
...     def __delitem__(self, a):
...         del self._data[a]
...     def populate(self, d):
...        if d:
...           for k,v in d.iteritems():
...               self[k] = v
...
>>> headers = {'User-Agent': 'Python/2.7.5'}
>>> a = MyFoo()
>>> a.populate(headers)
>>> a['User-Agent']
'Python/2.7.5'
Run Code Online (Sandbox Code Playgroud)

你可以看到,MyFoo是一个简单的类,但它定义了一些特殊的方法__setitem__,__getitem__,__delitem__.这些方法让类的任何对象都像字典一样.

populate方法正在进行原始源中循环中的操作; 并且一旦运行 - 字典的所有键都成为结果MyFoo对象的键.

获取HttpResponse类的来源,你会注意到同样的__setitem__,__getitem__,__delitem__被定义(向下滚动到线140).