run*_*neh 20
虽然Quamrana的建议工作得很好,但我想提出一些可能的改进,以使其更加pythonic.他们依赖于使用标准库中的inspect模块.
inspect.getmembers()
inspect.isclass()
有了这些,如果您愿意,可以将整个事情简化为单个列表理解:
def find_subclasses(module, clazz):
return [
cls
for name, cls in inspect.getmembers(module)
if inspect.isclass(cls) and issubclass(cls, clazz)
]
Run Code Online (Sandbox Code Playgroud)
Chr*_*Lee 11
这是一种方法:
import inspect
def get_subclasses(mod, cls):
"""Yield the classes in module ``mod`` that inherit from ``cls``"""
for name, obj in inspect.getmembers(mod):
if hasattr(obj, "__bases__") and cls in obj.__bases__:
yield obj
Run Code Online (Sandbox Code Playgroud)
我是否可以认为 Chris AtLee 和 zacherates 的答案都不满足要求?我认为对 zacerates 答案的修改更好:
def find_subclasses(module, clazz):
for name in dir(module):
o = getattr(module, name)
try:
if (o != clazz) and issubclass(o, clazz):
yield name, o
except TypeError: pass
Run Code Online (Sandbox Code Playgroud)
我不同意给定答案的原因是,第一个不产生作为给定类的远距离子类的类,第二个包含给定类。
归档时间: |
|
查看次数: |
8243 次 |
最近记录: |