dir()没有内置方法

时间:2014-02-04 04:05:31

标签: python

有没有办法在不使用内置函数的情况下获取对象的所有属性?我希望在没有类型包的情况下实现这一点,或者如果可能的话,不要手动检查双下划线。

我试过了dir,但它给了我所有内置的东西。理想情况下,我喜欢像

这样的东西
class A():
    foo = 'bar'
>>>> dir(a)
['foo']

而不是

>>>> dir(a)
['__doc__', '__module__', 'foo']

2 个答案:

答案 0 :(得分:9)

您是否只想过滤掉“特殊”方法,或者实际知道实例本身实现了哪些方法,而不是从基础继承(或两者都是,因为这些是不同的问题,真的)?

您可以使用相当简单的方法过滤掉特殊方法:

def vdir(obj):
    return [x for x in dir(obj) if not x.startswith('__')]

>>> vdir(a)
['foo']

答案 1 :(得分:0)

我发现自己经常编写代码来执行此操作,以至于将其与其他一些杂项功能一起放入了一个名为apoor的小型Python包中。

>>> from apoor import fdir 
>>> class A: foo = “bar”
>>> fdir(A)
[“foo”]