最近,我试图在Python中存储和读取文件中的信息,并遇到了一个小问题:我想从文本文件中读取类型信息.从string到int或float的类型转换非常有效,但是从字符串到类型的类型转换似乎是另一个问题.当然,我尝试过这样的事情:
var_type = type('int')
Run Code Online (Sandbox Code Playgroud)
但是,type不是用作强制转换,而是用作查找变量类型的机制,这实际上就str在这里.
我找到了一种方法:
var_type = eval('int')
Run Code Online (Sandbox Code Playgroud)
但我一般尽量避免类似的功能/报表eval或exec在那里我可以.所以我的问题如下:是否有另一种pythonic(和更具体的)方法将字符串转换为类型?
Python 3.7即将到来,我想测试一些奇特的新dataclass+打字功能.使用本机类型和typing模块中的类型,可以很容易地获得正确工作的提示:
>>> import dataclasses
>>> import typing as ty
>>>
... @dataclasses.dataclass
... class Structure:
... a_str: str
... a_str_list: ty.List[str]
...
>>> my_struct = Structure(a_str='test', a_str_list=['t', 'e', 's', 't'])
>>> my_struct.a_str_list[0]. # IDE suggests all the string methods :)
Run Code Online (Sandbox Code Playgroud)
但是我想要尝试的另一件事是在运行时强制类型提示作为条件,即不应该dataclass存在具有不正确类型的类型.它可以很好地实现__post_init__:
>>> @dataclasses.dataclass
... class Structure:
... a_str: str
... a_str_list: ty.List[str]
...
... def validate(self):
... ret = True
... for field_name, field_def in self.__dataclass_fields__.items():
... actual_type = type(getattr(self, …Run Code Online (Sandbox Code Playgroud) 我有以下非常简单的数据类:
import dataclasses
@dataclasses.dataclass
class Test:
value: int
Run Code Online (Sandbox Code Playgroud)
我创建了该类的实例,但我使用了一个字符串而不是整数:
>>> test = Test('1')
>>> type(test.value)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)
我真正想要的是强制转换为我在类定义中定义的数据类型:
>>> test = Test('1')
>>> type(test.value)
<class 'int'>
Run Code Online (Sandbox Code Playgroud)
我必须__init__手动编写该方法还是有一种简单的方法来实现此目的?