0

クラスが辞書として「使用」されたときに独自のプロパティの1つにアクセスするエレガントで簡潔な方法があるかどうかを理解しようとしています。基本的に、順序付けられた辞書に実装されるすべてのメソッドをその1つにリダイレクトしますプロパティ。

現在、私は 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

最終的に、IterableUserDict を継承し、self.data を設定することは、私が必要としていたものに明示的に機能し、シリアライズとデシリアライズの際に予期せぬ結果や追加の怪しさはありませんでした。

私の元のソリューションに固執して、自分のオブジェクト内の選択されたデータのサブセットに対するシンプルで本格的な dict のような動作が必要な場合は、それをお勧めします。

それはかなり単純で、特に厳しいスケーラビリティや複雑さの要件が強調されているわけではありません。

于 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 に答える