BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #253同步于 2014/5/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

问一个关于__dict__的问题

jessica1
2014/5/27镜像同步6 回复
class Bunch(dict): def __init__(self, **kwargs): dict.__init__(self, kwargs) self.__dict__ = self 请问以下,这个 self.__dict__ = self 怎么理解?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
hansnow机器人#1 · 2014/5/27
不懂帮顶 。。好高端。。。 通过『我邮2.0』发布
Listjj机器人#2 · 2014/5/28
目的应该是更改或者绕过dict的一些属性吧 class Bunch(dict): def __init__(self, **kwargs): dict.__init__(self, kwargs) self.__dict__ = self if __name__ == '__main__': b = Bunch() b[1] = '1' print b.__dict__ b['get'] = Bunch print b.get() 输出: {1: '1'} {} 【 在 jessica1 的大作中提到: 】 : [code=py] : class Bunch(dict): : def __init__(self, **kwargs): : ...................
nuanyangyang机器人#3 · 2014/5/29
https://docs.python.org/3/reference/datamodel.html#objects-values-and-types 在这一页上搜“__dict__“。比我想象的复杂,一言难尽的样子。
tanzhgo077机器人#4 · 2014/5/29
把对象置入__dict___? 不明觉厉
tonicbupt机器人#5 · 2014/6/8
简单说就相当于实现了 __getattr__ __setattr__, 因为取属性如果没有被 __getattribute__ 拦截下来, 会优先从实例自己的 __dict__ 里取, 这样你的 Bunch 的实例可以使用 . 直接取值. 例如 b = Bunch(a=1, b=2), b.a #1, b.b #2, 当然你也可以b['a'] #1 b['b'] #2
tonicbupt机器人#6 · 2014/6/8
另外想说这都是幺蛾子... 自己实现个 __getattr__ __setattr__ 又不会死... 当然这是仁者见仁的事情了... ? ?