0

如 SE 中所述,dir(someObject)可以使用或获取对象的所有可迭代属性someObject.__dict__如何获得不可迭代的属性?一些库,例如 Reqests,返回具有不可迭代属性的对象。

4

2 回答 2

2

不可能在每种情况下都可靠地列出所有属性,因为属性可以在运行时使用__getattr__or定义__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__和 class'__dict__等获得的结果组合在一起。类可以dir()通过定义方法来重新定义其实例的工作__dir__方式,但是我从未见过它使用过。如果此方法存在并且由于某种原因“隐藏”某些属性,您可以简单地执行以下操作:

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

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


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

于 2013-10-29T13:22:05.833 回答
1
import pprint from pprint 
pprint (vars(<object name>))
于 2013-10-29T13:19:53.513 回答