首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将元组用作attr.ib的转换器,而不会扰乱mypy?

在Python中,attr.ibattrs库中的一个装饰器,用于自动创建属性并添加额外的功能,如类型检查和初始化验证。mypy是一个静态类型检查器,用于在运行代码之前检测类型错误。

如果你想将元组用作attr.ib的转换器,同时确保mypy不会报错,你可以使用自定义的转换函数,并在该函数上使用typing.cast来明确告诉mypy转换后的类型。

以下是一个示例:

代码语言:txt
复制
import attr
from typing import Tuple, cast

def tuple_to_something(value: Tuple[str, int]) -> 'Something':
    # 这里进行你的转换逻辑
    return Something(value[0], value[1])

@attr.s(auto_attribs=True)
class Something:
    name: str
    value: int

# 使用自定义转换器
@attr.s(auto_attribs=True)
class MyClass:
    my_attr: Something = attr.ib(converter=tuple_to_something)

# 示例用法
obj = MyClass(('example', 123))
print(obj.my_attr.name)  # 输出: example
print(obj.my_attr.value)  # 输出: 123

# 确保mypy不会报错
reveal_type(obj.my_attr)  # 应该显示Something类型

在这个例子中,tuple_to_something函数将一个元组转换为一个Something实例。我们使用typing.cast来明确告诉mypy这个转换函数返回的是Something类型。

解释

  1. 自定义转换器tuple_to_something函数负责将元组转换为Something实例。
  2. 类型注解:在tuple_to_something函数的返回类型注解中,我们使用字符串'Something'来表示类型,这样可以避免循环导入问题。
  3. 使用attr.ib:在MyClass中,我们使用attr.ib并指定converter=tuple_to_something来应用自定义转换器。
  4. 类型检查:通过reveal_type函数,我们可以验证mypy是否正确识别了my_attr的类型。

参考链接

这种方法确保了类型安全,并且不会干扰mypy的类型检查。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券