2011-11-17 87 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