【发布时间】:2020-06-19 04:33:36
【问题描述】:
我想使用 dataclasses 模块中的函数 fields,但我的 IDE 一直警告我它只能用于数据类(类或实例)。我知道可以忽略警告,但我想将我的变量转换为数据类类型,因为它更具可读性和 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 与未知数据类的参数一起使用的任何其他上下文中都会出现相同的警告。
我通常通过使用函数typing.cast 来避免这样的类型警告,但是在警告行没有DataclassType 让我可以执行cast(DataclassType, self)。
因此我的问题是:如何将变量转换为数据类类型?
【问题讨论】:
-
我在您的代码中没有看到任何类。看看python.org/dev/peps/pep-0557
-
变量
some_instance来自其他地方。我们可以假设它是一个数据类实例。 -
我会同意克劳斯的请求。像这样的简单导入没有理由触发警告。它可能存在于您的数据类或字段函数的定义中。尝试创建另一个具有相同结构但虚拟内容的模块,以使用您可以在此处发布的内容来重现该问题。这也可能与“字段”名称的使用有关,但我对此表示怀疑。
-
我添加了更多上下文。我希望现在更清楚了。
标签: python python-3.x python-dataclasses