我有点麻烦的Python(使用app引擎)。我对它很新(更习惯于Java),但我一直很享受....直到现在。
以下不起作用!
class SomeClass(db.Model):
item = db.ReferenceProperty(AnotherClass)
class AnotherClass(db.Model):
otherItem = db.ReferenceProperty(SomeClass)
据我所知,似乎没有办法让这个工作。对不起,如果这是一个愚蠢的问题。希望如果是这样的话,我会得到一个快速回答。
提前致谢。
答案 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)
如果存在任何元类魔法,它会与某些元类魔法发生冲突...值得一试。