Verthais
Verthais

Reputation: 447

Incompatible types in assignment in inheritance - Mypy error

In my project my Mypy is haunting me over some inheritance, and I can't find a reason why in some cases it does not complain about the error:

note: In class "Cat":
Incompatible types in assignment (expression has type "Dict[str, Any]", base class "Animal" defined the type as "None")

and does not for the Dog, code example:

class Animal:
  attributes = None

  def __init__(self):
    if attributes is None:
      raise NotImplementedExcepton


class Cat(Animal):
  attributes = {
    'fur': 'black',
    'sound': 'meow',
  }

class Dog(Animal):
  attributes = {
    'fur': 'brown',
    'sound': 'woof',
  }

Upvotes: 0

Views: 2202

Answers (1)

Tom Wojcik
Tom Wojcik

Reputation: 6189

attributes can be None as seen in Animal, so you define it as Optional. Then you also define what type of attributes might be.

from typing import Dict, Optional


class Animal:
    attributes: Optional[Dict[str, str]] = None

    def __init__(self):
        if self.attributes is None:
            raise Exception


class Cat(Animal):
    attributes = {
        'fur': 'black',
        'sound': 'meow',
    }

This won't raise any mypy errors.

Upvotes: 1

Related Questions