2011-11-17 28 views
1

是否可以向用户创建的类添加dict功能?将python的词典功能扩展到用户创建的类

即:

class Foo(object): 
    def __init__(self, x, y): 
     self.x 
     self.y 
    def __dict__(self): 
     return {'x': self.x, 'y': self.y} 

f = Foo() 
dict(f) <-- throws TypeError: iteration over non-sequence 
+0

你只是想能够将它传递给dict(),或者你会宁愿它像一个字典,所以你可以做'f = Foo();打印f ['x']'?两者都是可能的。 – six8

回答

3

dict构造期望任一个映射或键/值对作为参数的一个可迭代,所以你的类需要任一实施映射协议或可迭代。

下面是一个例子如何得到关于后者的做法:

class Foo(object): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
    def __iter__(self): 
     return vars(self).iteritems() 

用法示例:

>>> dict(Foo(2, 3)) 
{'x': 2, 'y': 3} 

我不知道这是多么有用的,虽然。你可以只是做

>>> vars(Foo(2, 3)) 
{'x': 2, 'y': 3} 

这会不会对你的类实现__iter__()工作。

+1

或者我可以打电话给vars(my_object):) – TheOne