如何在python中枚举嵌套类?

2024-04-24 00:07:23 发布

您现在位置: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}

Tags: 函数returnobjectdefpassassertneedimplementation
2条回答

^{}^{}结合使用应该有助于:

classes = [name for name, member_type in inspect.getmembers(A)
           if inspect.isclass(member_type) and not name.startswith("__")]

print(classes)  # prints ['B', 'C']

请注意,排除__class__需要进行not name.startswith("__")检查-我怀疑有一种更简单、更具毒瘾的方法,如果有人能指出这一点,我将不胜感激。

您可以使用下一个代码:

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])。你知道吗

相关问题 更多 >