我正在使用Google App Engine多模型對可能具有多個屬性實例的數據進行建模 - 例如,一個聯繫人可能有多個電話號碼。之所以這樣說,是我的設置:如何獲取GAE多模的所有類屬性(包括通過@property定義的那些屬性)
class Foo(polymodel.PolyModel):
some_prop = ndb.StringProperty()
@property
def bar(self):
return Bar.query(Bar.foo == self.key)
class Bar(ndb.Model):
foo = ndb.KeyProperty(kind = Foo)
other_prop= ndb.StringProperty()
(我得到這個方法讀取數據建模這個GAE文章後:https://developers.google.com/appengine/articles/modeling)
現在,當我做的:
Foo._properties
我只可以訪問如下:
{'some_prop': StringProperty('some_prop'),
'class': _ClassKeyProperty('class', repeated=True)}
有什麼辦法可以訪問ALL屬性,包括那些定義的w ith「@property」?
非常感謝任何幫助或或洞察我要去哪裏錯了。 - 李
UPDATE: 基於@ FastTurle最偉大的答案,我現在已經添加了一個返回通過@property標記爲屬性都一流的性能以及方法的類方法:
def props(self):
return dict(self._properties.items() + \
{attr_name:getattr(self,attr_name) for \
attr_name, attr_value in \
Foo.__dict__.iteritems() if \
isinstance(attr_value,property)}.items())
FastTurtle:哇,沒想到這個高品質級響應如此之快:非常感謝!我的代碼現在看起來好多了+我更多地瞭解了裝飾器。我編輯了我的答案,以顯示我添加的類方法,以返回屬性objs的屬性和方法。希望這是有道理的。非常感謝您的幫助,非常感謝! :) – pixelphantom
@pixelphantom很高興聽到我的回答很有幫助!你添加的方法看起來不錯,希望能做到你想要的。祝你好運 :) – FastTurtle