如何获取GAE多重模型的所有类属性(在Python中),包括通过@property定义的那些属性

像素幻像

我正在使用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())
快乌龟

表演Foo._properties应该使您能够访问在上polymodel.PolyModel继承的上定义的任何属性google.appengine.ext.db.Property

这意味着KeyPropertyStringProperty等...将显示出来Foo._properties,所以我假设你现在需要找到所有的装饰方法property

幸运的是,这并不难。首先,快速了解装饰器(请原谅我,如果您已经知道的话)。

在python中,装饰器只是语法糖例如,这两种方法导致相同的结果:

@property
def bar(self):
    pass

def bar(self):
    pass
bar = property(bar)

对我们来说幸运的是,property(obj)返回了一个新property对象。这也意味着也@property将返回一个property对象。您可以将其property视为一门课!最后可以isinstance(bar, property)用来查看是否bar是一个属性。

最后,我们可以通过检查的每个Foo属性并仅选择那些作为property实例的属性来使用它

for attr_name, attr_value in Foo.__dict__.iteritems():
    if isinstance(attr_value, property):
        print attr_name, attr_value

# bar, <property object at ...>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过反射获取所有ICollection属性

来自分类Dev

Django:如何返回与ForeignKey相关联的所有模型,包括这些模型的所有属性?

来自分类Dev

如何通过前缀获取所有data- *属性

来自分类Dev

将不同的属性应用于所有方法的自定义类属性

来自分类Dev

MAYA中的PYTHON:获取所有属性

来自分类Dev

使用Python中的BeautifulSoup获取具有特定类属性的链接的href文本

来自分类Dev

如何通过angular2中的渲染器(或替代方法)获取类属性

来自分类Dev

复杂的Xpath获取所有值,但不包括某些特定的类属性

来自分类Dev

JavaScript:从方法中调用时,类属性没有定义

来自分类Dev

在Python中调用类属性

来自分类Dev

如何使用多重继承获取某些父类属性值

来自分类Dev

如何为所有对象设置类属性?

来自分类Dev

如何更改所有骨干模型属性

来自分类Dev

如何使用gson获取模型中定义的属性值

来自分类Dev

从文件中读取所有属性(也包括嵌套属性!)

来自分类Dev

将不同的属性应用于所有方法的自定义类属性

来自分类Dev

如何从所述类中对类属性调用`property_exists()`?

来自分类Dev

MAYA中的PYTHON:获取所有属性

来自分类Dev

如何在 C# 中获取类属性的属性值

来自分类Dev

如何使用GAE上的投影获取查询中重复属性的所有值

来自分类Dev

从对象中获取所有属性,包括引用成员的属性

来自分类Dev

复制类属性中的所有请求属性

来自分类Dev

如何继承类属性Python

来自分类Dev

如何在python中获取类属性(Django模型)的类型

来自分类Dev

如何从嵌套的类属性中获取值

来自分类Dev

如何使用 jquery 获取所有 div 标签类属性

来自分类Dev

获取类属性中的所有类名

来自分类Dev

如何在Python中修改实例属性而不是类属性

来自分类Dev

如何获取类属性列表

Related 相关文章

  1. 1

    通过反射获取所有ICollection属性

  2. 2

    Django:如何返回与ForeignKey相关联的所有模型,包括这些模型的所有属性?

  3. 3

    如何通过前缀获取所有data- *属性

  4. 4

    将不同的属性应用于所有方法的自定义类属性

  5. 5

    MAYA中的PYTHON:获取所有属性

  6. 6

    使用Python中的BeautifulSoup获取具有特定类属性的链接的href文本

  7. 7

    如何通过angular2中的渲染器(或替代方法)获取类属性

  8. 8

    复杂的Xpath获取所有值,但不包括某些特定的类属性

  9. 9

    JavaScript:从方法中调用时,类属性没有定义

  10. 10

    在Python中调用类属性

  11. 11

    如何使用多重继承获取某些父类属性值

  12. 12

    如何为所有对象设置类属性?

  13. 13

    如何更改所有骨干模型属性

  14. 14

    如何使用gson获取模型中定义的属性值

  15. 15

    从文件中读取所有属性(也包括嵌套属性!)

  16. 16

    将不同的属性应用于所有方法的自定义类属性

  17. 17

    如何从所述类中对类属性调用`property_exists()`?

  18. 18

    MAYA中的PYTHON:获取所有属性

  19. 19

    如何在 C# 中获取类属性的属性值

  20. 20

    如何使用GAE上的投影获取查询中重复属性的所有值

  21. 21

    从对象中获取所有属性,包括引用成员的属性

  22. 22

    复制类属性中的所有请求属性

  23. 23

    如何继承类属性Python

  24. 24

    如何在python中获取类属性(Django模型)的类型

  25. 25

    如何从嵌套的类属性中获取值

  26. 26

    如何使用 jquery 获取所有 div 标签类属性

  27. 27

    获取类属性中的所有类名

  28. 28

    如何在Python中修改实例属性而不是类属性

  29. 29

    如何获取类属性列表

热门标签

归档