7
動的にインポートされる子パッケージのモジュールがあります。クラスに含まれるクラスをどのように反復処理できますか?動的にインポートされたモジュールで定義されたクラスを反復する
私はモジュールをインポートすると、このような名前一覧表示されています:
package = current_module.__name__
package = package[:package.rindex(".")] # get the package
package = "%s.sub.%s"%(package,name) # make the name of the child
print "(loading package %s)"%package
module = __import__(package) # this succeeds
for name,obj in inspect.getmembers(module):
print name,type(obj)
これだけプリントモジュールの属性ではなく、モジュールが定義するクラスタイプ:
__builtins__ <type 'dict'>
__doc__ <type 'NoneType'>
__file__ <type 'str'>
__name__ <type 'str'>
__package__ <type 'NoneType'>
__path__ <type 'list'>
imported_package <type 'module'>
UPDATEを
私のクラスはないと思われます__dict__
fromlist
が空でない限り! from-listの値は検証されていないようです。 [""]
はうまくいくように見えますが、突然クラスが表示されます!
誰でもこの理由を説明できますか?クラスに名前をマップする辞書を作成する:
(標準Ubuntuのパイソン2.7.1+(R271:86832)
importがfromlist-clauseを持っていないとうまくいきません;質問が更新されました – Will
私はあなたがtryブロック内でissubclassをやっていると思いますか? – Will
(最初に)それが必要なのか分からない(二番目)いいえ私は本当に 'isinstance'を意味し、' issubclass'ではなく 'try'を伴わないことを意味しました。各クラスは、型 '型'のオブジェクトでもあります。 – pvoosten