Home > Net >  Mypy error when passing subclass for baseclass
Mypy error when passing subclass for baseclass

Time:01-10

from abc import ABC


class A(ABC):
    ...


class B(A):
    ...


def foo(bar: A): ...


foo(B)

Mypy error: Argument 1 to "foo" has incompatible type "Type[B]"; expected "A"

Am I doing something wrong or it's just mypy bug?

CodePudding user response:

B is a type. bar: A means an object of type A or anything inherited from A (in this case A() or B()).

So either:

foo(B())

if you want to pass instances of classes, or

from typing import Type

def foo(bar: Type[A]): ...

foo(B)

if you want to pass classes themselves.

For python 3.9 :

def foo(bar: type[A]): ...

foo(B)

though mypy might have some issues with that.

  • Related