我想使用来自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
将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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。