为什么 UserDict 支持 ** 操作?

2016-09-08 16:24:38 +08:00
 petelin
def foo(**d):
	print(type(d))
    
d = UserDict()

foo(**d)

我看 UserDict 实现并没有什么特别之处,所以这个执行过程是怎么样的?我想让一个继承 object 的类也可以被** 操作该怎么做?

其实 **myobject.to_dict() 也能满足需求,但是太丑了,而且这个 myobject 意义上就是一个 dict ,只不过实现了 __getitem__ 所以可以 myobject.dictkey 这么调用,各位有什么黑魔法实现吗?

2409 次点击
所在节点    Python
6 条回复
zeiyso
2016-09-08 16:50:55 +08:00
petelin
2016-09-08 18:10:09 +08:00
@zeiyso 好神啊,我搜了半天都没搜到。。。 我的关键词: python create double start class ,

有一个问题,如果我继承了 mapping, 调用 myobject.items , items 就会当做方法,而不执行 __getitem__ ,这个有什么办法吗?

我需要一个纯净的命名空间,至少里面不能有非 _ 开头的关键字
Cynic222
2016-09-08 18:31:42 +08:00
@petelin start 和 star 还是有区别的
skydiver
2016-09-08 18:52:07 +08:00
@Cynic222 233333
zeiyso
2016-09-09 09:29:43 +08:00
@petelin 啊,那应该定义 __getattr__( ) ?
petelin
2016-09-09 10:01:14 +08:00
@zeiyso 是,昨天脑抽了,写的都乱套了,是哪个意思。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/304870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX