1

私は定義されたクラスを持っています__str__:__repr__

class MyClass:
    def __init__(self, version):
        self.version = version
    def __repr__(self):
        return self.version

myObjs = {}
o = MyClass("1")
myObjs[o] = o
print myObjs

どちらが印刷されますか:

{1: 1}

MyClass オブジェクトを文字列表現ではなく値としてディクショナリに保存するにはどうすればよいですか? getVersion() を追加することもできましたが、もっとエレガントな方法があるかどうか知りたかっただけです。

ありがとう

4

1 に答える 1

3

コメントで述べたように、辞書はオブジェクトを格納しています。

class MyClass(object):
    def __init__(self, version):
        self.version = version
    def __repr__(self):
        return self.version

myObjs = {}
o = MyClass("1")
myObjs[o] = o
print type(o)                                                                   
print o.__class__                                                               
print myObjs                                                                    
print type(myObjs[o])

以下を出力します。

<class '__main__.MyClass'>
<class '__main__.MyClass'>
{1: 1}
<class '__main__.MyClass'>

このように表示される理由は、ディクショナリが関数と関数__repr__の両方にキーと値を使用するためです。ただし、整数であいまいさを軽減するために、いつでも関数を変更できます。__str____repr____repr__

def __repr__(self):
    return '{0}({1})'.format(str(self.__class__.__name__), self.version)

サンプル出力:

{MyClass(1): MyClass(1)}

最適な形式を自由に使用してください。また、クラスをオブジェクトから拡張するように変更して、新しいスタイルのクラスにしました (クラスと型を言語でまとめ、クラスに追加の機能 (デコレータやスーパー関数など) を追加します)。さもないと:

print type(o)

出力

<type 'instance'>
于 2012-11-10T01:01:23.753 に答える