【问题标题】:dir() without built-in methods没有内置方法的 dir()
【发布时间】:2014-02-04 04:05:31
【问题描述】:

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

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

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

而不是

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我只是对过滤特殊方法感兴趣。我想到了这一点,但认为可能有更直接的东西。检测这些的唯一方法是通过字符串函数?
    • "检测这些的唯一方法是通过字符串函数吗?"是的,特殊方法与常规方法相同,双下划线的区别只是一种约定。
    【解决方案2】:

    我发现自己经常编写代码来执行此操作,因此我将它放在一个名为 apoor 的小型 Python 包中,并包含其他我发现自己重用的杂项函数。

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

    【讨论】:

      【解决方案3】:

      我使用 list(reversed(dir(a))) 先显示定义的方法和属性,而不是先显示内置方法和属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 2015-08-12
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2010-10-10
        • 2013-04-13
        相关资源
        最近更新 更多