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 回答