2

私はPythonを初めて使用し、モジュール内のクラスをインポートせずにモジュールをインポートできることを発見しました。私は次の構造を持っています-

myLib/
    __init__.py
    A.py
    B.py

driver.py

driver.py内で私は次のことを行います-

import myLib
tmp = myLib.A()

実行しようとすると、次のエラーが発生します。AttributeError:'module'オブジェクトに属性Aがありません

これを行ってもEclipseは文句を言いません。実際、myLib.Aと入力すると、オートコンプリートでAが表示されます。

モジュールをインポートし、その中のクラスをインポートしないとはどういう意味ですか?

ありがとう

P

4

2 に答える 2

4

Python は Java ではありません。AでありB、クラスではありません。それらはモジュールです。それらを個別にインポートする必要があります。(そしてmyLib、モジュールではなくパッケージです。)

モジュールAおよびB自体には、 and と呼ばれる場合と呼ばれない場合があるクラスが含まれる場合がAありBます。モジュールには好きなだけ多くのクラスを含めることができます。クラスを持たない大規模な Python プログラムを作成することも十分に可能であるため、まったく持たないこともできます。

ただし、質問に答えるために、インポートすると、現在の名前空間内にmyLib名前が配置されるだけです。myLibのすべて__init__.pyが実行されます。そのファイル自体が名前を定義またはインポートする場合、それらは の属性として使用できますmyLib

実行すると、モジュールが現在の名前空間にfrom myLib import Aインポートされたことになります。しかし、繰り返しになりますが、そのクラスは名前で参照する必要があります。そのため、そこにクラスがある場合は、. AAAA.A()

3 番目のオプションは、クラスを現在のネームスペースにfrom myLib.A import Aインポートする do です。この場合、呼び出してクラスをインスタンス化するだけです。 AA()

于 2013-03-10T19:37:30.417 に答える
1

あなたがする必要があります

from mylib import A

内部Aの属性ではないので__init__.pymylib

あなたがimport mylibそれをインポートすると__init__.py

私の答えを見てください。 パッケージについて

于 2013-03-10T19:21:04.513 に答える