2

我对 Python 有一点麻烦(用于应用程序引擎)。我对它相当陌生(更习惯于 Java),但我一直很享受......直到现在。

以下行不通!

class SomeClass(db.Model):
  item = db.ReferenceProperty(AnotherClass)

class AnotherClass(db.Model):
  otherItem = db.ReferenceProperty(SomeClass)

据我所知,似乎没有办法让它发挥作用。对不起,如果这是一个愚蠢的问题。希望如果是这样,我会得到一个快速的答案。

提前致谢。

4

2 回答 2

6

在 Python 中查看“class”关键字的一种方法是在脚本的初始执行期间简单地创建一个新的命名范围。因此,您的代码会引发NameError: name 'AnotherClass' is not defined异常,因为 Python 在执行该class AnotherClass(db.Model):行时尚未执行该self.item = db.ReferenceProperty(AnotherClass)行。

解决此问题的最直接方法:将这些值的初始化移动到类的__init__方法(构造函数的 Python 名称)中。

class SomeClass(db.Model):
  def __init__(self):
    self.item = db.ReferenceProperty(AnotherClass)

class AnotherClass(db.Model):
  def __init__(self):
    self.otherItem = db.ReferenceProperty(SomeClass)
于 2009-11-12T18:35:36.230 回答
1

如果你的意思是它不会工作,因为每个类都想引用另一个,试试这个:

class SomeClass(db.Model):
  item = None

class AnotherClass(db.Model):
  otherItem = db.ReferenceProperty(SomeClass)

SomeClass.item = db.ReferenceProperty(AnotherClass)

如果有的话,它会与一些元类魔法相冲突……不过值得一试。

于 2009-11-12T18:26:08.090 回答