如何将变量转换为数据类类型?

时间:2020-03-06 12:27:31

标签: python python-3.x python-dataclasses

我想使用git remote add origin git@git.ourserver.com:teamalpha/repositorytwo.git 模块中的函数fields,但是我的IDE一直警告我,它只能用于数据类(类或实例)。我知道可以忽略该警告,但是我想将变量转换为数据类类型,因为它更具可读性且与IDE兼容。

一个简单的例子:

dataclasses

上下文:

我想编写一个“ mixin”类以在我的数据类上添加类型强制。示例:

from dataclasses import fields

all_fields = fields(some_instance) # Here I get a warning

如果将from typing import Any from dataclasses import fields, Field class TypedDCMixin: def __post_init__(self): self._check_fields_types() def _check_fields_types(self): for field in fields(self): # HERE I get the warning from my IDE field_value = getattr(self, field.name) self._check_field_type(field, field_value) def _check_field_type(self, field: Field, field_value: Any): # whatever pass 与未知数据类一起使用的其他任何上下文也将产生相同的警告。

我通常通过使用功能dataclasses.fields来避免类似的类型警告,但是我没有typing.cast可以在警告行执行DataclassType

因此,我的问题是:如何将变量转换为数据类类型?

1 个答案:

答案 0 :(得分:1)

使用带有dataclass装饰器的强制转换。

修改原始示例以添加演员表:

from typing import Any, cast
from dataclasses import fields, Field, dataclass   

class TypedDCMixin:
    def __post_init__(self):
        self._check_fields_types()

    def _check_fields_types(self):
        for field in fields(cast(dataclass, self)): # Here the casting is used  
            field_value = getattr(self, field.name)
            self._check_field_type(field, field_value)

    def _check_field_type(self, field: Field, field_value: Any):
        # whatever
        pass
相关问题