以Python作为内置数据类型打印类的实例?

以Python作为内置数据类型打印类的实例?,python,python-2.7,Python,Python 2.7,我正在看《巨蟒》杂志 我想知道为什么我可以直接将UserDict的实例打印为字典。 详细地说,这些代码 import UserDict; d = UserDict.UserDict({1:1, 'a':2}); print d; print d.data; class MyDict: def __init__(self, dictData=None): self.data = dictData; d = MyDict({1:1, 'a':2}); print d;

我正在看《巨蟒》杂志

我想知道为什么我可以直接将UserDict的实例打印为字典。 详细地说,这些代码

import UserDict;

d = UserDict.UserDict({1:1, 'a':2});
print d;
print d.data;
class MyDict:
    def __init__(self, dictData=None):
        self.data = dictData;

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

{'a': 2, 1: 1}
{'a': 2, 1: 1}
这些代码是什么

import UserDict;

d = UserDict.UserDict({1:1, 'a':2});
print d;
print d.data;
class MyDict:
    def __init__(self, dictData=None):
        self.data = dictData;

d = MyDict({1:1, 'a':2});
print d;
print d.data;
将有输出(在我的机器上)


{'a':2,1:1}
换句话说,我如何定义我的类,并将其实例打印为内置数据类型?
谢谢大家!

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

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

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

\uuuu str\uuuu
\uuuu repr\uuuu
之间的区别在于,大多数
\uuuuu str\uuuu
应该是可读和可理解的
\uuuu repr\uuuu
可以用来提供一个
eval
'd字符串来构造原始对象(虽然不是必需的)-请参见此处的差异解答:

对象的打印方式归结为它的
repr
-当您从混合继承时,它已经提供了
repr
功能。另外请注意,现在您可以直接从
dict
继承

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

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

\uuuu str\uuuu
\uuuu repr\uuuu
之间的区别在于,大多数
\uuuuu str\uuuu
应该是可读和可理解的
\uuuu repr\uuuu
可以用来提供一个
eval
'd字符串来构造原始对象(虽然不是必需的)-请参见此处的最佳答案以了解差异:

实际上,
print
隐式调用
str
,而不是
repr
。当然,对于没有定义自己的
\uuuuu str\uuuuuuu
的对象,
\uuuu repr\uuuuuu
就是所谓的回退…没错,但是如果没有定义
\uuuuu str\uuuuuu
,那么
\uuuuuu repr\uuuu
就是回退给你了!但是
\uuuu repr\uuuu
的目的仅仅是为了调试吗?@KFC并不特别-阅读我提供的链接上的公认答案-这比我能解释的要好得多!实际上,
print
隐式调用
str
,而不是
repr
。当然,对于没有定义自己的
\uuuuu str\uuuuuuu
的对象,
\uuuu repr\uuuuuu
就是所谓的回退…没错,但是如果没有定义
\uuuuu str\uuuuuu
,那么
\uuuuuu repr\uuuu
就是回退给你了!但是
\uuuu repr\uuuu
的目的仅仅是为了调试吗?@KFC并不特别-阅读我提供的链接上的公认答案-这比我能解释的要好得多!顺便说一句——我不认为有太多python程序员喜欢看这行末尾的分号。你可以提出“他们不伤害你”的论点——你绝对是对的(直到你的同事厌倦了看他们,他过来打你的脸)——:-P@mgilson事实上,我也在为是否应该使用分号而挣扎。不使用它的动机是什么?谢谢。顺便说一句,我在学习python之前主要是写C的,这就是我使用分号的原因……它们是不必要的。Python是一种非常优雅的语言,我想很多人都会认为,当你试图阅读代码时,它会在视觉上干扰思维的流动。而且,C和受其影响的语言是大多数人使用分号的原因;-)@姆吉尔森听起来很有道理。我会考虑的。谢谢你指出这一点。:)顺便说一句——我不认为有太多python程序员喜欢看这行末尾的分号。你可以提出“他们不伤害你”的论点——你绝对是对的(直到你的同事厌倦了看他们,他过来打你的脸)——:-P@mgilson事实上,我也在为是否应该使用分号而挣扎。不使用它的动机是什么?谢谢。顺便说一句,我在学习python之前主要是写C的,这就是我使用分号的原因……它们是不必要的。Python是一种非常优雅的语言,我想很多人都会认为,当你试图阅读代码时,它会在视觉上干扰思维的流动。而且,C和受其影响的语言是大多数人使用分号的原因;-)@姆吉尔森听起来很有道理。我会考虑的。谢谢你指出这一点。:)