モジュールmodule
とクラスが与えられた場合、で定義されたMyClass
すべてのサブクラスのリストを取得する方法は?MyClass
module
2533 次
4 に答える
8
inspect.getmembers()を使用できます。あなたが持っていると仮定しますmymodule.py
:
class A(object):
pass
class B(A):
pass
class C(A):
pass
のすべてのサブクラスを取得する方法は次のA
とおりです。
import inspect
import mymodule
from mymodule import A
def is_subclass(o):
return inspect.isclass(o) and issubclass(o, A)
print inspect.getmembers(mymodule, predicate=is_subclass)
または、短いlambda
形式で:
print inspect.getmembers(mymodule,
predicate=lambda o: inspect.isclass(o) and \
issubclass(o, A))
于 2013-09-24T09:35:03.923 に答える
1
classes = ()
for name in dir(module):
obj = getattr(module, name)
try:
# obj.__mro__ raises AttributeError on non-class
if MyClass in obj.__mro__ and obj is not MyClass:
classes += (obj,)
#else:
# print name, "is no subclass of", MyClass
except AttributeError:
#print name, "is no class"
pass # you might of course use an if hasattr(obj, '__mro__') instead
きれいではありませんが、機能します。ただし、代替は大歓迎です...
于 2013-09-24T09:24:27.943 に答える
0
おそらくpyclbrモジュールを試してみてください — Pythonクラスのブラウザサポート
于 2013-09-24T09:49:29.220 に答える