首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python __repr__

python __repr__
EN

Stack Overflow用户
提问于 2012-11-10 08:08:10
回答 1查看 2.1K关注 0票数 1

我有一个定义了__str____repr__的类:

代码语言:javascript
复制
class MyClass:
    def __init__(self, version):
        self.version = version
    def __repr__(self):
        return self.version

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

打印的内容:

代码语言:javascript
复制
{1: 1}

如何将MyClass对象作为值存储到字典中,而不是字符串表示中?我本可以添加getVersion(),但只是想知道是否有更好的方法。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-10 09:01:24

正如注释中提到的,字典存储对象。

代码语言:javascript
复制
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])

打印以下内容:

代码语言:javascript
复制
<class '__main__.MyClass'>
<class '__main__.MyClass'>
{1: 1}
<class '__main__.MyClass'>

它以这种方式打印的原因是,字典在其__str____repr__函数中都使用其键和值的__repr__。不过,您可以随时更改您的__repr__函数,使其使用整数来减少歧义:

代码语言:javascript
复制
def __repr__(self):
    return '{0}({1})'.format(str(self.__class__.__name__), self.version)

示例输出:

代码语言:javascript
复制
{MyClass(1): MyClass(1)}

您可以随意使用任何最适合您的格式。我还更改了您的类以从object扩展,使其成为一个新的样式类(它将语言中的类和类型结合在一起,并为类添加额外的功能(如装饰器和超级函数))。否则:

代码语言:javascript
复制
print type(o)

输出

代码语言:javascript
复制
<type 'instance'>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13317834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档