如何注释类型函数?

问题描述 投票:0回答:1
@classmethod
def get_serializer_class(
    cls,
    skip_hidden: bool = False
) -> type[serializers.Serializer]:
    fields = {}

    for filter_name, filter_field in cls.filters.items():
        if skip_hidden and filter_field.hidden:
            continue
        fields[filter_name] = filter_field.serializer_field

    serializer_class = type(
        f'{cls.__name__}Serializer',
        (cls._meta.serializer_class,),
        fields)
    return serializer_class

我应该为

serializer_class
变量指定什么类型? 现在 linter 显示错误:
Expected type 'Type[Serializer]', got 'type' instead

我尝试指定类型

Any
,但在我看来这是错误的解决方案

python python-typing
1个回答
0
投票

type()
功能

使用三个参数,返回一个新类型对象。这本质上是类语句的动态形式。 基元组包含基类。

参考

type[T]
表示返回值预计是 T 子类的类型。

您只发布了方法代码,所以我不知道您的元字段包含什么。 但为了确保基类相同,您可以在

cls._meta.serializer_class
函数中将
serializers.Serializer
替换为
type

@classmethod
def get_serializer_class(
    cls,
    skip_hidden: bool = False
) -> type[serializers.Serializer]:
    fields = {}

    for filter_name, filter_field in cls.filters.items():
        if skip_hidden and filter_field.hidden:
            continue
        fields[filter_name] = filter_field.serializer_field

    serializer_class = type(
        f'{cls.__name__}Serializer',
        (serializers.Serializer,),
        fields)
    return serializer_class
© www.soinside.com 2019 - 2024. All rights reserved.