在Python中引用类

时间:2009-11-12 18:22:15

标签: python google-app-engine class definition

我有点麻烦的Python(使用app引擎)。我对它很新(更习惯于Java),但我一直很享受....直到现在。

以下不起作用!

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:6)

在Python中查看“class”关键字的一种方法是在初始执行脚本期间创建一个新的命名范围。所以你的代码抛出了一个 NameError:name'AtherClass'没有定义异常,因为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)

答案 1 :(得分:1)

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

class SomeClass(db.Model):
  item = None

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

SomeClass.item = db.ReferenceProperty(AnotherClass)

如果存在任何元类魔法,它会与某些元类魔法发生冲突...值得一试。