如何枚举python中的嵌套类



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

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

def enumerate_nested_classes(_class):
    return ()  # need proper implementation instead

assert set(enumerate_nested_classes(A)) == {A.B, A.C}

inspect.getmembers()inspect.isclass()在这里应该有所帮助:

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("__")检查来排除__class__-我怀疑有一种更简单、更蟒蛇的方法可以做到这一点,如果有人能指出这一点的话,我将不胜感激

您可以使用下一个代码:

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'>]

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

最新更新