0

モジュールを動的にインポートしてクラスを作成する必要があります。
これはPython 3.2での私の作業コードです:

klass = {}
mod = __import__('sites.' + self.className + '_login', fromlist=[self.className])
klass[self.className] = getattr(mod, self.className)
klass[self.className](**self.args)

モジュールはsitesフォルダ内にあります。それが呼び出されmy_site_login、そのモジュール内のクラスですmy_site

Python 3.3 にアップグレードしたため、コードが機能しなくなりました。_____import_____に置き換えられたことを読みましたimportlib.import_module。いくつかの方法を試しましたが、うまくいきません。

これは私が試したものです:
https://stackoverflow.com/a/8790051/1095101

mod = getattr(import_module('sites.' + self.className + '_login'), self.className)

他に何を試したか思い出せません。私が言えることは、print()インポートを試みた直後に置いたものはどれも表示されていなかったということです。エラーメッセージは表示されません。それは何もしません。

4

1 に答える 1

1

これを再構築したい。sitesパッケージ__init__.pyファイルで、動的にインポートする必要のあるすべてのモジュールをインポートします。

次に、代わりに属性アクセスを使用します。

import sites

mod = getattr(sites, self.className + '_login')
klass[self.className] = getattr(mod, self.className)
klass[self.className](**self.args)

my_site_login.pyモジュールが動的に生成される場合、呼び出しimportlib.import_module()可能オブジェクトは非常に簡単に機能します。

importlib

mod = importlib.import_module('sites.{}_login'.format(self.className))
klass[self.className] = getattr(mod, self.className)
klass[self.className](**self.args)

インタラクティブコマンドプロンプトから、これは正常に機能します。

>>> import importlib
>>> importlib.import_module('sites.my_site_login')
<module 'sites.my_site_login' from './sites/my_site_login.py'>

Python 2.7、3.2、3.3でテストしました。

于 2013-02-07T10:27:15.070 に答える