0

この行を使用して、スクリプトで使用されるすべてのクラスを取得しています。

clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)

スクリプト内で作成されたクラス以外のすべてのクラスを除外する(一般的な)方法はありますか?(インポートされたクラスの名前は必要ありません。)

単にすべての要素をループしてチェックするの__main__は、あまりにも醜いです。

4

1 に答える 1

1

__module__これらのクラスの属性を調べます。

clsmembers = [c for c in inspect.getmembers(sys.modules[__name__], inspect.isclass) if c[1].__module__ == __name__]

デモ:

>>> import inspect
>>> import sys
>>> class Foo(object): pass
... 
>>> from json import *
>>> inspect.getmembers(sys.modules[__name__], inspect.isclass)
[('Foo', <class '__main__.Foo'>), ('JSONDecoder', <class 'json.decoder.JSONDecoder'>), ('JSONEncoder', <class 'json.encoder.JSONEncoder'>)]
>>> [c for c in inspect.getmembers(sys.modules[__name__], inspect.isclass) if c[1].__module__ == __name__]
[('Foo', <class '__main__.Foo'>)]
于 2013-03-24T12:21:28.983 に答える