我正在使用 Google App Engine 多模型对可以具有多个属性实例的数据进行建模——例如,一个联系人可以有多个电话号码。说这是我的设置:
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)}
有什么方法可以访问所有属性,包括那些用“@property”定义的?
非常感谢您对我哪里出错的任何帮助或见解。- 李
更新:基于@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())