开发者社区> 问答> 正文

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

我想使用来自dataclasses模块的fields函数,但是我的IDE一直警告我,它只能用于dataclasss(类或实例)。我知道可以忽略该警告,但是我想将变量转换为数据类类型,因为它更具可读性且与IDE兼容。

一个简单的例子:

from dataclasses import fields

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

内容:

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

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与一个未知的参数一起使用是一个数据类。

我通常通过使用函数typeing.cast来避免类似的类型警告,但是在警告行中没有DataclassType可以执行cast(DataclassType,self)

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

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 21:49:15 562 0
1 条回答
写回答
取消 提交回答
  • 将cast与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
    

    回答来源:stackoverflow

    2020-03-24 21:49:22
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载