2

モジュールを作成しようとしていますが、何か間違っているのではないかと心配しています。名前空間でいくつかの問題が発生しています。私が持っているものとよく似た例を作成しました。コメントによると、ファイル名が付いた3つのファイルがあります。

# $PYTHON_PATH/a/b.py

class X:
    pass

def make_x():
    return X()

そして私は初期化ファイルを持っています

# $PYTHON_PATH/a/__init__.py

from b import make_x

それから私はファイルを持っています

# $PYTHON_PATH/a/c.py

from b import X
x = X()

# For testing
if __name__ == "__main__":
    from a import *
    y = make_x()

    print x.__class__
    print y.__class__

    print isinstance(x,X)
    print isinstance(y,X)

実行時の出力c.py

b.X
a.b.X
True
False

おそらく、これはモジュール内からモジュールをインポートする際の問題であり、この種のハッキーな方法でテストしていないときは解消されます ( from a import *)。これは本当ですか、それとも私が全体をどのように構築しているかに何か問題がありますか.

4

1 に答える 1

1

Python のインポートの癖の 1 つに出くわしました。X各サブモジュールは異なる方法でインポートしています。これを修正する方法は、現在使用している欠陥のあるインポートの代わりに、fromXの相対インポートを実行することです。これはパッケージに限定されますが、の存在は関係なくこれを意味します。.ba.ca__init__.py

于 2013-06-15T20:59:26.180 に答える