0

我正在阅读 DiveIntoPython。

我想知道为什么我可以直接将 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}

换句话说,我如何定义我的类,并将其实例打印为内置数据类型?谢谢!

4

1 回答 1

3

对象的打印方式归结为它repr- 当您从 mixin 继承时,它已经提供了该repr功能。另请注意,这些天您可以直接继承dict

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

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

The difference between __str__ and __repr__ is that mostly __str__ should be readable and understable. __repr__ where it's possible can be used to provide an eval'd string constructing the original object (although not necessary) - see the great answer here for the difference: Difference between __str__ and __repr__ in Python

于 2013-01-25T20:43:38.143 回答