1

Google App Engineから、理解できないエラーが発生しました。クラス「Car」を含むファイル「Car.py」を含むモジュール「X」が与えられた場合、

そして、このコードブロックを考えると:

import X 

class Passenger(db.Model):
  car = db.ReferenceProperty(X.Car.Car)

エラーが発生します:

AttributeError: 'module' object has no attribute 'Car'

しかし、私がそれを次のように変更した場合:

from X import Car

class Passenger(db.Model):
  car = db.ReferenceProperty(Car.Car)

できます。彼らは私には同じように見えますが、明らかにそうではありません。違いは何ですか?

4

2 に答える 2

3

Lattywareが指摘しているように、これXはパッケージであり、それがパッケージの動作方法です。外側のレベルをインポートしても、その中のモジュールに自動的にアクセスできるわけではありません。import X.Car全体をとして参照したい場合は、これを行うことができますX.Car.Car

(PythonはJavaではないことにも注意してください。各クラスを別々のファイルに入れる理由はありません。そうしても、モジュールとパッケージには通常小文字の名前が付けられます。)

于 2012-05-01T16:49:53.190 に答える
1

ここでの問題は、パッケージXがロードされるときに、モジュールが含まれているが、それらが名前空間にないことです。

モジュールをパッケージの名前空間に配置するには、パッケージのファイルにimport modulemodule当然のことながらモジュールの名前です)を追加します。__init__.pyその後、パッケージの名前空間に配置され、Carにアクセスする最初の方法を使用できます。

于 2012-05-01T16:49:21.270 に答える