python __repr__

标签 python

我的类(class)是 __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(),但只是想知道是否有一些更优雅的方法。

谢谢

最佳答案

正如评论中提到的,字典正在存储对象。

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)}

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

print type(o)

输出

<type 'instance'>

关于 python __repr__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13317834/

相关文章:

python - 在python中将字符串视为文件

python - Django pytest 用于登录

python - 使用 tox 运行脚本时诗歌依赖项不可用

python - 将 pandas 数据框中的列从 String 转换为 Float

python - fvwm-menu-desktop 在菜单创建期间挂起,使用 --get-menus 时出现 python 异常失败

Python - 使用 Selenium 单击滚动到底部

python - 将 Boto3 与 freezegun 一起使用会导致 403

python - 使用制表符格式化空白

java - 使用 graal python 从 java 获取外部环境参数

python - 安装 python 模块时出现错误 "socket.timeout: The read operation timed out"