1

ディレクトリに次のファイルがあります。

foo/
  foo.py
  foolib/
    __init__.py
    bar.py

__init__.py 内:

__all__ = ["bar"]

bar.py 内:

class Bar:
    def __init__(self):
        None
    def hello(self):
        print("Hello World")
        return

def hi():
    print("Hi World")

foo.py 内に次のコードがあるとします。

from foolib import *

bar.hi()

foobar = Bar()
foobar.hello()

"Hi World" は印刷されますが、Bar() の NameError が発生します。モジュールを明示的にインポートする場合:

from foolib.bar import *

期待される出力「Hello World」が得られます。

クラスを明示的に呼び出さずに、モジュールからクラスをインポートする方法はありますか? __init__ ファイルに何かが欠けているように感じます。それか、Pythonのベストプラクティスに明らかに違反しています。

4

1 に答える 1

1

クラスをインポートするには、クラスをどこかにインポートする必要があります。すると、あなたfrom foolib import *のせいで__init__.pyモジュールがインポートされますbar。そのモジュール内の何かにアクセスすることはできません。

インポートせずbarにパッケージからすべてに自動的にアクセスしたい場合は、これを に入れることができます:foolibbar__init__.py

from bar import *

これにより、 のすべてが でbar直接利用できるようになりfoolibます。

于 2012-08-20T18:55:01.330 に答える