1. 你是两个不同的事情真的混在一起。

使用dir()或inspect模块让你有兴趣(什么__builtins__作为一个例子,你的任何对象,而不是)。

>>> l = dir(__builtins__)

>>> d = __builtins__.__dict__

打印该字典但是看上你喜欢:

>>> print l

['ArithmeticError', 'AssertionError', 'AttributeError',...

>>> from pprint import pprint

>>> pprint(l)

['ArithmeticError',

'AssertionError',

'AttributeError',

'BaseException',

'DeprecationWarning',

...

>>> pprint(d, indent=2)

{ 'ArithmeticError': ,

'AssertionError': ,

'AttributeError': ,

...

'_': [ 'ArithmeticError',

'AssertionError',

'AttributeError',

'BaseException',

'DeprecationWarning',

...

2.

你想瓦尔()与PPRINT混合:

from pprint import pprint

pprint (vars(your_object))

3.

def dump(obj):

for attr in dir(obj):

print "obj.%s = %s" % (attr, getattr(obj, attr))

4.

目录有但只会给你的属性'如果你希望自己的价值观,以及尝试的__dict__。

class O:

def __init__ (self):

self.value = 3

o = O()

>>> o.__dict__

{'值':3}

5.

你的“目录()”函数来做到这一点。

>>> import sys

>>> dir(sys)

['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo

t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder

, 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info'

'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault

ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he

version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_

ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit

, 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption

', 'winver']

>>>

函数是帮助。

>>> help(sys)

Help on built-in module sys:

NAME

sys

FILE

(built-in)

MODULE DOCS

CodeGo.net

DESCRIPTION

This module provides access to some objects used or maintained by the

interpreter and to functions that interact strongly with the interpreter.

Dynamic objects:

argv -- command line arguments; argv[0] is the script pathname if known

6.

要打印的对象,你可能的当前状态:

>>> obj # in an interpreter

print repr(obj) # in a script

print obj

为你的类定义__str__或__repr__方法。从Python__repr__(self)由被叫repr()内置函数和字符串

转换(反引号)

计算“官方”的字符串

一个对象的表示。如果在所有

可能的话,这应该看起来像一个

有效的Python表达式,可能是

用于重新创建的对象与

值(给定一个适当的

如果这是不可能的 CodeGo.net,

一个字符串表单的“<...>

描述...>“应该返回。

返回值必须是一个字符串

对象。如果一个类定义再版()

但不__str__(),然后__repr__()是

当一个“非正式”的字符串

的该实例的代表性

类是必需的。这通常是

用于调试,所以重要的是

该项表示是

信息丰富,__str__(self)由被叫str()内置函数和由打印

“非正式”

一个对象的字符串表示表单。

这不同于__repr__()在这

它并不必须是一个有效的Python

表达式:更方便或

简洁的表述,如

代替。返回值必须是一个

字符串对象。

7.

可能是值得一试-

是否有相当于Perl的Data ::自卸车一个Python?

我是这样的-

需要注意的是Perl有一个名为Data ::

Dumper模块的转换对象数据返回到perl的源代码(注:它并没有转化代码回到源,而且几乎总是你不想在输出的函数)。这可持久性,但目的是为了调

试。

有许多事情标准的python

PPRINT未能达到,尤其是刚刚停止时,看到一个对象的实例,并为您的对象的内六角指针(降序呃,这个指针是不是一大堆的方式)。因此,概括地

说,python是所有关于这个伟大的面向对象的范式,但你得到的开箱即用的工具是专为与对象比其他工作。

在Perl的Data ::

Dumper允许你控制你想有多深去,并且还检测循环链表结构(这是非常重要的)。这个过程是比较容易实现的perl的对象有超越他们的祝福没有特别的魔

法(一个普遍良好定义的线程)。

8.

在大多数情况下,使用__dict__或dir()你将会得到你想要。如果您碰巧需要更多的细节,标准库包含了inspect模块,它可以让你获得细节令人印象深刻的金额。真正的nuggests包括:

函数

类层次结构

的一个函数/类对象的源代码

局部变量出对象的

如果你只是寻找“没有我的对象有什么属性值?”,然后dir()和__dict__可能是足够的。如果你真的希望挖掘到任意对象的当前状态(牢记在python几乎一切都是对象),然后inspect是值得考虑的。

9.

例如转储对象的魔法:

$猫dump.py

#!/usr/bin/python

import sys

if len(sys.argv) > 2:

module, metaklass = sys.argv[1:3]

m = __import__(module, globals(), locals(), [metaklass])

__metaclass__ = getattr(m, metaklass)

class Data:

def __init__(self):

self.num = 38

self.lst = ['a','b','c']

self.str = 'spam'

dumps = lambda self: repr(self)

__str__ = lambda self: self.dumps()

data = Data()

print data

$pythondump.py

与灵知utils的:

$pythondump.py gnosis.magic MetaXMLPickler

这是一个有点过时,但仍然坚持工作。

10.

PPRINT包含一个“漂亮的打印机”为你制造数据结构的美观交涉。格式化器产生的数据结构的表示,可以正确地由解释器进行解析,并且也很容易对一个人的阅读。输出保持在一行上,如果可能的话,与缩进时,多行拆分。

11.

为什么不能简单的:

关键,在obj的值。字典iteritems()。:

打印键,值

12.

我需要在日志中打印并无法PPRINT它会打破它。相反,我这样做,并几乎得到了的东西。

DO = DemoObject()

itemDir = DO.__dict__

for i in itemDir:

print '{0} : {1}'.format(i, itemDir[i])