这里我要找的是PHP的print_r函数。

这样我就可以通过查看有问题的对象的状态来调试脚本。


当前回答

试试beeprint吧。

它不仅可以帮助你打印对象变量,还可以帮助你输出漂亮的结果,就像这样:

class(NormalClassNewStyle):
  dicts: {
  },
  lists: [],
  static_props: 1,
  tupl: (1, 2)

其他回答

Vars()似乎显示了该对象的属性,但dir()似乎也显示了父类(es)的属性。您通常不需要看到继承的属性,如str, doc。dict等等。

In [1]: class Aaa():
...:     def __init__(self, name, age):
...:         self.name = name
...:         self.age = age
...:
In [2]: class Bbb(Aaa):
...:     def __init__(self, name, age, job):
...:         super().__init__(name, age)
...:         self.job = job
...:
In [3]: a = Aaa('Pullayya',42)

In [4]: b = Bbb('Yellayya',41,'Cop')

In [5]: vars(a)
Out[5]: {'name': 'Pullayya', 'age': 42}

In [6]: vars(b)
Out[6]: {'name': 'Yellayya', 'age': 41, 'job': 'Cop'}

In [7]: dir(a)
Out[7]:
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 ...
 ...
 '__subclasshook__',
 '__weakref__',
 'age',
 'name']

我建议使用help(your_object)。

帮助(dir)

如果不带参数调用,则返回当前作用域中的名称。 否则,返回由(部分)属性组成的名称按字母顺序排列的列表 给定对象的属性。 如果对象提供了一个名为__dir__的方法,则将使用它;否则 使用默认的dir()逻辑并返回: 对于模块对象:模块的属性。 对于类对象:它的属性和递归的属性 它的碱基。 对于任何其他对象:它的属性,它的类的属性和 递归地获取其类的基类的属性。

帮助(变量)

不带参数,相当于locals()。 带有一个参数,等价于object.__dict__。

已经提到了Dir,但它只提供属性的名称。如果你也想要它们的值,试试__dict__。

class O:
   def __init__ (self):
      self.value = 3

o = O()

输出如下:

>>> o.__dict__

{'value': 3}

为什么不简单点呢:

for key,value in obj.__dict__.iteritems():
    print key,value

我需要在一些日志中打印调试信息,无法使用pprint,因为它会破坏它。相反,我这样做了,得到了几乎相同的结果。

DO = DemoObject()

itemDir = DO.__dict__

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