我想使用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
。
因此,我的问题是:如何将变量转换为数据类类型?
答案 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