打印对象的所有不可迭代属性

时间:2013-10-29 13:16:39

标签: python debugging

As mentioned on SE可以使用dir(someObject)someObject.__dict__获取对象的所有可迭代属性。 如何获取不可迭代的属性?某些库(如Reqests)返回具有不可迭代属性的对象。

2 个答案:

答案 0 :(得分:2)

不可能在每种情况下都可靠地列出所有属性,因为可以使用__getattr____getattribute__在运行时定义属性这一简单事实。

例如,以下类有50%的机会创建新属性或提升AttributeError

import random

class AttributeGenerator(object):
    def __getattr__(self, attr):
        if random.random() < 0.5:
            setattr(self, attr, None)
            return getattr(self, attr) 
        else:
            raise AttributeError(attr)

从实例获取属性的唯一通用函数是dir()vars()

请注意,dir()默认情况下会合并__dict____slots__和类__dict__等所获得的结果。类可以重新定义dir()的工作方式他们的实例是通过定义__dir__方法,但我从未见过它。 如果这种方法存在并且出于某种原因“隐藏”某些属性,您可以这样做 类似的东西:

attributes = list(object.__dict__.keys()) + list(obj.__slots__) + list(type(obj).__dict__)

(通过适当的错误检查!)以获得默认的dir()输出。


这就是说,如果您对某个特定的库感兴趣,那么可能会有一些特定于该库的方法可靠地工作。

答案 1 :(得分:1)

import pprint from pprint 
pprint (vars(<object name>))
相关问题