Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 没有内置方法的dir()_Python - Fatal编程技术网

Python 没有内置方法的dir()

Python 没有内置方法的dir(),python,Python,有没有办法在没有内置项的情况下获取对象的所有属性?我希望在不使用types包的情况下实现这一点,或者如果可能的话,不需要手动检查双下划线 我试过dir,但它提供了所有内置的东西。理想情况下,我想要 class A(): foo = 'bar' >>>> dir(a) ['foo'] 而不是 >>>> dir(a) ['__doc__', '__module__', 'foo'] 您只是想过滤掉“特殊”方法,还是真正知道哪些方法是在实例本

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

我试过dir,但它提供了所有内置的东西。理想情况下,我想要

class A():
    foo = 'bar'
>>>> dir(a)
['foo']
而不是

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

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

您可以使用一些相当简单的方法筛选出特殊方法,如:

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

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

我发现自己经常编写代码来实现这一点,所以我把它放在一个小的Python包中,该包与我发现自己正在重用的其他杂项函数一起调用

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

是的,我只是对过滤特殊方法感兴趣。我想了想,但觉得可能有更直接的事情。检测这些的唯一方法是通过字符串函数?“检测这些的唯一方法是通过字符串函数?”是的,特殊方法与常规方法相同,双下划线区别只是一种惯例。