[英]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.