转换类名称中的字符串(从appengine数据存储区转换为类)

时间:2010-01-23 08:08:22

标签: python google-app-engine metaprogramming eval

  

可能重复:
  Does python have an equivalent to Java Class.forName()?

我正在使用appengine来开发一个应用程序。理想情况下,我想定义一种新类型(称为Recipe),如下所示:

class Recipe(db.Model):
    ingredients = db.ListProperty(type)
    quantities = db.ListProperty(int)

但是,似乎您不能使用“type”作为ListProperty中的类值。我想的是使用ListStringProperty而不是使用ListProperty,并将类名保存为字符串。但是,如何将字符串转换为类名,因此我可以这样写:

str = "A"
# convert str to class name in var class_str
class_str().call_some_method()

提前致谢,

2 个答案:

答案 0 :(得分:1)

我建议你让ingredient列出一个字符串列表,用你要保存的类型的pickle.dumps填充它,并在检索时使用pickle.loads来获取一个类型对象回来。

pickle按名称序列化类型,因此存在一些约束(实质上,类型必须存在于某个模块的顶层),但这比进行自己的序列化更容易(尤其是类型名称的 de serializaton),这实际上需要您重复pickle已经代表您完成的一些工作! - )

答案 1 :(得分:0)

也许你可以像这样使用eval?

class Juice(object):
    def amount(self):
        print "glass of juice"

juice = "Juice"
eval(juice)().amount()
# prints "glass of juice"