8

インポート方法に応じて、識別に依存するメソッド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
4

1 に答える 1

2

ここで正しいのは、python パスに親/子ディレクトリを決して持たないことだと思います。また、あなたがそうしていることを考えると、これは不可能かもしれないと思います。あなたが何をしているのかにもよりますが、.__file__代わりにどのようにインポートされても一貫しているべきでしょうか?

于 2012-11-05T19:55:35.390 に答える