Estou tentando adicionar um tipo de parâmetro ao readinto()
método declarado em uma classe personalizada que deriva de RawIOBase
, assim:
from io import RawIOBase
class Reader(RawIOBase):
def readinto(self, buf: bytearray) -> int:
pass # actual implementation omitted
Mas os direitos autorais reclamam:
io.py:6:9 - error: Method "readinto" overrides class "_RawIOBase" in an incompatible manner
Parameter 2 type mismatch: base parameter is type "WriteableBuffer", override parameter is type "bytearray"
"Buffer" is not assignable to "bytearray" (reportIncompatibleMethodOverride)
1 error, 0 warnings, 0 informations
Como corrijo isso? Observação: sei que posso remover a dica de tipo completamente. Quero atribuir a ela o tipo correto.
Estou usando Python 3.13.3 e direitos autorais 1.1.400.
Você precisa usar a mesma definição de tipo da sua base. Você pode usar o mesmo alias de tipo aqui importando-o do
_typeshed
pacote , desde que o coloque sob umaTYPE_CHECKING
proteção:Você pode contar com a
_typeshed
existência do pacote ao executar sob um verificador de tipos , porque o verificador de tipos traz esse pacote. É assim quepyright
se sabe qual é a assinaturaRawIOBase.readinto()
, por exemplo. AdicioneiMaybeNone
ao acima pelo mesmo motivo, porque isso também faz parte da assinatura documentada.Alternativamente, como
WriteableBuffer
é apenas um alias de tipo paracollections.abc.Buffer
, o seguinte também funciona (substituindoMaybeNone
por uma redefinição):Veja The
Any
Trick para uma explicação de por queMaybeNone
é um alias paraAny
.