在Google App Engine上使用Python时,克隆(复制)Expando类对象的好方法是什么?
我在这里遇到了一些代码,但除非我弄错了,否则它在expando属性上不起作用:Copy an entity in Google App Engine datastore in Python without knowing property names at 'compile' time
谢谢!
答案 0 :(得分:2)
以下是Nick's function的修订版,其中包含动态属性:
def clone_entity(e, **extra_args):
"""Clones an entity, adding or overriding constructor attributes.
The cloned entity will have exactly the same property values as the original
entity, except where overridden. By default it will have no parent entity or
key name, unless supplied.
Args:
e: The entity to clone
extra_args: Keyword arguments to override from the cloned entity and pass
to the constructor.
Returns:
A cloned, possibly modified, copy of entity e.
"""
klass = e.__class__
props = dict((k, v.__get__(e, klass)) for k, v in klass.properties().iteritems())
props.update(dict([(k, getattr(e, k)) for k in e.dynamic_properties()]))
props.update(extra_args)
return klass(**props)