在Python中将类实例打印为内置数据类型?
我正在阅读《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__ 的区别