2

I am doing a for loop on instantiating sub classes of an abstract class, but it seems that mypy does not seem to be able to figure out that it is instantiating sub classes that implement the abstract class

I receive this error: Cannot instantiate abstract class 'AbstractDirConvertManager' with abstract attribute 'convert'

adding copy of the code for the classes (I removed imports from the copied code for easier reading)

from abc import abstractmethod


class AbstractDirConvertManager:
    def __init__(self, pack: Pack, input_path: str, server_version: Version, entity_dir_name: str = ''):
        self.pack = pack
        self.input_path = input_path
        self.server_version = server_version
        self.entity_dir_name = entity_dir_name

    @abstractmethod
    def convert(self):
        pass

    def should_convert(self) -> bool:
        return self.is_dir_convert_manager_path() or self.is_pack_path()

    def is_pack_path(self) -> bool:
        return os.path.basename(os.path.dirname(self.input_path)) == PACKS_DIR

    def is_dir_convert_manager_path(self) -> bool:
        return os.path.basename(self.input_path) == self.entity_dir_name

class LayoutsDirConvertManager(AbstractDirConvertManager):
    VERSION_6_0_0 = Version('6.0.0')

    def __init__(self, pack: Pack, input_path: str, server_version: Version):
        super().__init__(pack, input_path, server_version, entity_dir_name='Layouts')
        self.input_path: str = input_path
        self.server_version = server_version
        self.pack = pack

    def convert(self):
        if self.server_version >= self.VERSION_6_0_0:
            layout_converter: LayoutBaseConverter = LayoutSixConverter(self.pack)
        else:
            layout_converter = LayoutBelowSixConverter(self.pack)
        layout_converter.convert_dir()


class ClassifiersDirConvertManager(AbstractDirConvertManager):
    def convert(self):
        return "TODO"

    def __init__(self, pack: Pack, input_path: str, server_version: Version):
        super().__init__(pack, input_path, server_version, entity_dir_name='Classifiers')

Any help?

Tom Neeman
  • 25
  • 4
  • did you ever find a solution to this? Because I am having a similar problem https://stackoverflow.com/questions/74733799/why-does-mypy-throw-cannot-instantiate-abstract-class – jamiet Dec 08 '22 at 17:02

0 Answers0