如何在python中枚举嵌套类?

时间:2015-12-24 17:23:14

标签: python nested inner-classes

如何实现枚举嵌套类的函数?

    [NotMapped]
    public string FullInstrumentName
    {
        get { return string.Format("{0}", tblMarket.Market.Trim(); }
    }

2 个答案:

答案 0 :(得分:6)

inspect.getmembers()inspect.isclass()一起提供帮助:

accept

请注意,需要classes = [name for name, member_type in inspect.getmembers(A) if inspect.isclass(member_type) and not name.startswith("__")] print(classes) # prints ['B', 'C'] 检查以排除not name.startswith("__") - 我怀疑有一种更简单,更pythonic的方法,如果有人会指出这一点,我将不胜感激。

答案 1 :(得分:1)

您可以使用下一个代码:

import types


class A(object):
    class B(object):
        pass

    class C(object):
        pass

def enumerate_nested_classes(_class):
    return [getattr(_class, n) for n in dir(_class) if not n.startswith('__')
            and isinstance(getattr(_class, n), (type, types.ClassType))] 

assert enumerate_nested_classes(A) == [A.B, A.C]

print enumerate_nested_classes(A)打印[<class '__main__.B'>, <class '__main__.C'>]

NB。 dir(_class)结果列表按字母顺序排序,因此在使用assert enumerate_nested_classes(A) == [A.B, A.C]时最好使用:assert sorted(enumerate_nested_classes(A)) == sorted([A.B, A.C])