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?