1

Google App Engine 只是给了我一个我不明白的错误。给定一个包含文件“Car.py”的模块“X”,其中包含一个类“Car”,

并给出这段代码:

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 回答