繁体   English   中英

如何在python中枚举嵌套类?

[英]How to enumerate nested classes in 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__ - 我怀疑有一种更简单,更pythonic的方法,如果有人会指出这一点,我将不胜感激。

您可以使用下一个代码:

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) == [AB, AC] ,最好使用: assert sorted(enumerate_nested_classes(A)) == sorted([AB, AC])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM