Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
¿Cómo obtener una clase de datos abstracta para pasar mypy?

mypy v0.910 rechaza clases de datos abstractas en Python 3.9. Aquí está el ejemplo mínimo reproducible:

 from abc import ABC, abstractmethod from dataclasses import dataclass @dataclass class Liquid(ABC): @abstractmethod def drip(self) -> None: pass

Aquí está el mensaje de error:

 $ mypy --python-version 3.9 so.py so.py:4: error: Only concrete class can be given where "Type[Liquid]" is expected Found 1 error in 1 file (checked 1 source file)

¿Cómo obtengo este código para pasar mypy ?


notas

Deduzco del problema de mypy # 5374 que se trata de un error en mypy , notado por primera vez en 2018 y aún no corregido. Sin embargo, me imagino que las personas deben estar usando mypy con clases de datos abstractas, por lo que debe haber una solución alternativa o una forma correcta de definir o anotar la clase. ¿Qué se recomienda?

La base del mensaje de error parece ser que mypy asume que se puede instanciar cualquier objeto de tipo Type , pero no se pueden instanciar clases abstractas. Este parece ser el error ya que Type se define para significar un objeto de clase, no necesariamente un objeto de clase concreto (es decir, uno que pueda ser instanciado).

Agregar # type: ignore a la línea que contiene class Liquid no bloquea el mensaje de error. Dado que el código no contiene Type[Liquid] , supongo que debe estar en el código generado por dataclass . Type está en desuso en Python 3.9, pero aparentemente el dataclass código de clase de datos aún lo genera.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Agregue # type: ignore a la línea del decorador. Así que en tu caso sería:

 from abc import ABC, abstractmethod from dataclasses import dataclass @dataclass # type: ignore class Liquid(ABC): @abstractmethod def drip(self) -> None: pass
over 4 years ago · Santiago Trujillo Relatório

0

Cree una clase de datos como una combinación y deje que la clase ABC herede de ella:

 from abc import ABC, abstractmethod from dataclasses import dataclass @dataclass class LiquidDataclassMixin: my_var: str class Liquid(ABC, LiquidDataclassMixin): @abstractmethod def drip(self) -> None: pass

Esto también funciona con la verificación de tipo mypy. Recomiendo no usar # type: ignore ya que eso anula el punto de verificación de tipos. Tomado de este número de GitHub .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda