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.这究竟意味着什么?这会创造一个字吗?如果是,我如何调用此词典或在课堂外引用此词典?如果没有,它会做什么?
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).
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |