1

つまり、使用するには、次のようfooにすべてをインポートする必要があります。foo

from A.B.C import foo

またはせいぜい

from A.B import C
C.foo()

しかし、私はできません:

from A import B
B.C.foo()

のようなものが得られます'module' object has no attribute "C"

4

1 に答える 1

4

ドキュメントが理由を説明しています: http://docs.python.org/tutorial/modules.html

各モジュールには独自のプライベート シンボル テーブルがあり、モジュールで定義されたすべての関数によってグローバル シンボル テーブルとして使用されます。したがって、モジュールの作成者は、ユーザーのグローバル変数との偶発的な衝突を心配することなく、モジュールでグローバル変数を使用できます。一方、自分が何をしているのかわかっている場合は、その関数を参照するために使用されるのと同じ表記法 modname.itemname でモジュールのグローバル変数に触れることができます。

http://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces :

厳密に言えば、モジュール内の名前への参照は属性参照です。式 modname.funcname では、modname はモジュール オブジェクトであり、funcname はその属性です。この場合、モジュールの属性とモジュールで定義されたグローバル名の間の単純なマッピングがたまたまあります: それらは同じ名前空間を共有しています!

したがって、単純に BC はインポートされず、最後の例では不明です。しかし、これはうまくいきます:

from A import B.C
B.C.foo()
于 2012-06-13T22:32:30.030 に答える