インポート方法に応じて、識別に依存するメソッドself.__module__
が動作を変更するライブラリクラスがあります-相対的にインポートするか、絶対にインポートするかによって異なります。self.__name__
クラスの属性が自分自身を絶対に返す ようにする方法はありますか?
解決策の 1 つは、すべての人に同じ方法でサブクラスをインポートするよう強制することだと思いますが、ライブラリの観点からそれを強制する方法があるかどうか疑問に思っていました。
要約された構造
ライブラリにモジュールがあります
project/
mylib/
foo.py
LibraryClass
def get_name(self):
return "%s.%s.%s" % \
(self.__module__, self.__class__.__name__, self.some_init_property)
prog/
utils.py
fooClass(LibraryClass)
bar.py
def some_func()
#see below
では、 django プロジェクトの設定ファイルのクラス名の文字列を介して、mylib
すべてのサブクラスをインポートするインポーターを用意しています。LibraryClass
基本的に、私たちが目にしている動作は、インポート方法によって異なります。したがって、bar.py で観察している 2 つの動作があります。
def some_func_absolute():
from prog.utils import fooClass
f = fooClass("lalala")
print f.get_name()
#prints prog.utils.fooClass.lalala
対
def some_func_relative():
from utils import fooClass
f = fooClass("lalala")
print f.get_name()
#prints foo.fooClass.lalala