use*_*871 2 python dictionary operator-overloading
我想在Python中使用+ =表示法来更新类似dict的对象.我想要与dict.update方法具有相同的行为.这是我的班级(带有"."访问权限的字典):
class sdict(dict):
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__= dict.__setitem__
__delattr__= dict.__delitem__
Run Code Online (Sandbox Code Playgroud)
我试过了:
__iadd__ = dict.update
Run Code Online (Sandbox Code Playgroud)
和:
def __iadd__(self, other):
self.update(other)
return self
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用.(第一个破坏原始字典,第二个生成SyntaxError)
更新:
第二个定义实际上有效.它对我不起作用,因为我忘记了def.第一个不起作用,因为dict.update返回None.
DSM*_*DSM 12
我认为你所缺少的只是一个def:
class sdict(dict):
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__= dict.__setitem__
__delattr__= dict.__delitem__
def __iadd__(self, other):
self.update(other)
return self
>>> a = sdict()
>>> a.b = 3
>>> a
{'b': 3}
>>> a.b
3
>>> a['b']
3
>>> a += {'fred': 3}
>>> a
{'b': 3, 'fred': 3}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |