@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
,但在我看来这是错误的解决方案
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