从Python中的字符串获取类型实例

时间:2012-08-29 13:05:03

标签: python

所以,我需要将值转换为给定的类型:

if 'int' == type_name:
    value = int(value)
elif 'str' == type_name:
    value = str(value)
...

有没有办法一般地做到这一点? E.g:

type_instance = get_type_instance(type_name)
value = type_instance(value)

我正在使用Python 2.7,但也会对Python 3.X解决方案感兴趣。

更新

这是我正在使用的解决方案:

class Token:

    def __init__(self, type_name, value):
        self.type = type_name
        self.value = __builtins__[type_name](value) # not safe

这只是一个玩具解析器。 不要在生产中使用!

3 个答案:

答案 0 :(得分:6)

建立一个字典

TYPES = {
  'int' : int,
  'str' : str,
...
}

value = TYPES[type_name](value)

答案 1 :(得分:6)

如果您只需要__builtins__种类型,则可以

value = getattr(__builtins__, type_name)(value)

答案 2 :(得分:0)

由于您在问题的早期版本中指定了float64,我认为您也对获取numpy类型感兴趣。如果是这样,以下函数应解决此问题:

def can_typecast(type, value):        
    try:
        tp = getattr(__builtins__, type)
    except AttributeError:
        try:
            np = __import__('numpy')
            tp = getattr(np, type)
            if not isinstance(tp, type):
                raise ValueError('type string is not a type')
        except AttributeError:
            raise ValueError('Invalid type specified')
        except ImportError:
            raise ValueError('Numpy not found')
    try:
        tp(value)
    except ValueError:
        return False
    return True

这样做首先要查看给定的类型名称是否可以解析为内置类型。如果失败,它会查看是否可以在numpy 中找到类型名称,如果它是有效的类型对象,如果是,则尝试对其进行强制转换操作。