在类中查找属性的类型

mls*_*ves 1 python google-app-engine

我想确定一个类中属性的类型.我setattr用来设置值,我想检查预期的类型,以便我可以在调用之前正确转换字符串值setattr.

你是如何在python中做到这一点的?

编辑1-目前为止基于答案的一些其他信息:

我只知道我想要类型的属性的名称,这里是一些代码:

def populate_object_properties(values_as_strings, 
                               object_to_populate, 
                               properties_to_populate):
    for k in properties_to_populate:        
        value = values_as_strings.get(k)
        if value:
            setattr(object_to_populate, k, value)
        else:
            setattr(object_to_populate, k, None)
Run Code Online (Sandbox Code Playgroud)

我想value在打电话之前测试一下这是正确的类型setattr.

编辑2-我需要验证类型的原因是,我使用的是Google AppEngine的db.Model作为基类型object_to_populate,并且在将字符串放入int类型时不喜欢.我试图让问题尽可能简单,但也许这条信息会对某人的回答产生影响.(?)

Lup*_*uch 6

在AppEngine中,每个模型都有一个properties()类方法,它返回您在模型中声明的属性的字典.您可以使用它来检查模型对每个属性所期望的类型:

def populate_object_properties(values_as_strings, 
                               object_to_populate, 
                               properties_to_populate):
    model_properties = object_to_populate.properties()
    for k in properties_to_populate:        
        value = values_as_strings.get(k)
        model_property = model_properties.get(k)
        if value:
            if isinstance(model_property, StringProperty):
                setattr(object_to_populate, k, str(value))
            elif isinstance(model_property, IntegerProperty):
                setattr(object_to_populate, k, int(value))
        else:
            setattr(object_to_populate, k, None)
Run Code Online (Sandbox Code Playgroud)