相关疑难解决方法(0)

验证python数据类中的详细类型

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)

python typing python-dataclasses

18
推荐指数
2
解决办法
6707
查看次数

如何检查值是否与python中的类型匹配?

假设我有一个 python 函数,它的单个参数是一个非平凡类型:

from typing import List, Dict
ArgType = List[Dict[str, int]]  # this could be any non-trivial type
def myfun(a: ArgType) -> None:
    ...
Run Code Online (Sandbox Code Playgroud)

...然后我有一个从 JSON 源中解压出来的数据结构:

import json
data = json.loads(...)
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何检查在运行时data有正确的类型被用作论据来myfun()使用它作为一个参数之前myfun()

if not isCorrectType(data, ArgType):
    raise TypeError("data is not correct type")
else:
    myfun(data)
Run Code Online (Sandbox Code Playgroud)

python type-hinting python-typing

14
推荐指数
2
解决办法
5958
查看次数