在Python中将类实例打印为内置数据类型?

0 投票
1 回答
1570 浏览
提问于 2025-04-17 13:41

我正在阅读《Dive Into Python》这本书。

我想知道为什么我可以直接把一个UserDict的实例当作字典来打印。

具体来说,这段代码

import UserDict;

d = UserDict.UserDict({1:1, 'a':2});
print d;
print d.data;

会输出

{'a': 2, 1: 1}
{'a': 2, 1: 1}

而这段代码

class MyDict:
    def __init__(self, dictData=None):
        self.data = dictData;

d = MyDict({1:1, 'a':2});
print d;
print d.data;

在我的机器上会输出

<__main__.MyDict instance at 0x10049ef80>
{'a': 2, 1: 1}

换句话说,我该如何定义我的类,并把它的实例像内置数据类型那样打印出来呢?谢谢!

1 个回答

3

一个对象是怎么被打印出来的,主要取决于它的 repr 方法。当你从一个混合类(mixin)继承时,它已经提供了 repr 函数。另外,现在你可以直接从 dict 继承。

在你的情况下,你可以定义

def __repr__(self):
    return repr(self.data)

至于 __str____repr__ 的区别,简单来说,__str__ 主要是为了让人看得懂,容易理解。而 __repr__ 则可以用来提供一个可以用 eval 运行的字符串,这个字符串可以用来构造原来的对象(虽然这不是必须的)。想了解更多区别,可以看看这里的精彩回答:Python 中 __str__ 和 __repr__ 的区别

撰写回答