0

蟒蛇NDB類我有兩個類:相互引用

class A(ndb.Model): 
    first_prop = ndb.StructuredProperty(B) 

class B(ndb.Model): 
    second_prop = ndb.StructuredProperty(A) 

把類名引號給出了一個錯誤。

什麼是合理的方式使它發生,這使得代碼封裝保持完好?

+3

你有沒有想過這件事,我懷疑這可以工作,你有效地創建了一個遞歸屬性。 – 2015-02-24 22:05:41

+3

嗯......這似乎可能會導致週期性參考的問題,如果數據存儲處理該數據,我會感到震驚... – mgilson 2015-02-24 22:06:13

+1

您試圖實現什麼? – 2015-02-24 23:28:04

回答

2

您可以在之後指定屬性定義模型。請參閱_fix_up_properties文檔字符串here

class A(ndb.Model): 
    pass 

class B(ndb.Model): 
    pass 

A.first_prop = ndb.StructuredProperty(B) 
B.second_prop = ndb.StructuredProperty(A) 
A._fix_up_properties() 
B._fix_up_properties() 
+1

讓我們知道這種方法是否會在數據存儲區中創建一個黑洞。 – 2015-02-27 03:47:33

1

您可能想要使用ndb.KeyProperty而不是ndb.StructuredProperty。使用前者,讓兩個類相互引用是完全可以接受的。

+0

這個例子是另一個更具體的現實世界問題的別名。我正在使用'endpoints proto datastore',並且我需要使'@EndpointsAliasProperty(property_type = B.ProtoModel())', 引用函數的註釋中的每個類。 – user47376 2015-02-25 09:10:31

+2

@ user47376,然後問一個關於真實世界問題的問題,而不是你問的問題...... – 2015-02-25 13:57:21