0

我试图弄清楚是否有一种优雅而简洁的方式让一个类在“用作”字典时访问它自己的属性之一,基本上将在有序字典中实现的所有方法重定向到它的一个特性。

目前我从 IterableUserDict 继承并将其数据显式设置为另一个属性,它似乎正在工作,但我知道 UserDict 被认为有点旧,我担心我可能会忽略一些东西。

是)我有的:

class ConnectionInterface(IterableUserDict):
    def __init__(self, hostObject):
        self._hostObject= hostObject

        self.ports= odict.OrderedDict()
        self.inputPorts= odict.OrderedDict()
        self.outputPorts= odict.OrderedDict()

        self.data= self.ports

这样,我希望对象按照我的意思表现和响应(并被使用),除了我想在迭代时在其属性“端口”上获得一个免费的有序字典行为,项目是通过键获取的,有些东西是如果在 myObject 中查找 ala,依此类推。

欢迎任何建议,以上似乎工作正常,但我有一个奇怪的痒,我可能会遗漏一些东西。

提前致谢。

4

2 回答 2

1

In the end inheriting IterableUserDict and setting self.data explicitly worked out to what I needed and hasn't had any unforeseen consequences or added dodgyness when serialising and deserialising.

Sticking to my original solution I guess and can recommend it if anybody needs a simple and full fledged dict like behaviour on a selected subset of data in their own objects.

It's fairly simple and doesn't have particularly strict scalability or complexity requirements stressing it though.

于 2012-10-18T00:49:02.683 回答
0

当然,你可以做到这一点。字典的主要功能是 getattr 和 setattr 方法,因此您可以实现魔术方法__getattr____setattr__如下所示:

def __getattr__(self, key):
    return self.ports[key]

def __setattr__(self, key, value):
    self.ports[key] = value

如果你想要实现 .keys() 和 .values() 之类的东西,只需用这种风格编写它们:

def keys(self):
    return self.ports.keys()
于 2012-10-09T03:48:52.403 回答