Динамическая инициализация дочерних классов в Python

#python #oop

#python #ооп

Вопрос:

Я хотел бы динамически инициализировать дочерние классы базового класса. Вот что я пробовал до сих пор. Есть ли лучший способ / более правильный способ?

 class FileFromUrlBase(object):
    def __init__(self, url):
        self.url = url
        self._parse_url()
        self.f = self._get_file()

    def _parse_url(self):
        pass

    def _get_file(self):
        pass

class FileFromUrl1(FileFromUrlBase):
    def __init__(self, url):
        super(FileFromUrl1, self).__init__(url)

    def _parse_url(self):
        self.param_from_url1 = ...
        self.param_from_url2 = ...

    def _get_file(self):
        # Getting the file from Url1...

class FileFromUrl2(FileFromUrlBase):
    def __init__(self, url):
        super(FileFromUrl2, self).__init__(url)

    def _parse_url(self):
        self.param_from_url3 = ...
        self.param_from_url4 = ...

    def _get_file(self):
        # Getting the file from Url2...
  

Комментарии:

1. Что именно вы пытаетесь сделать? На первый взгляд кажется, что вы пренебрегаете вызовом super()._parse_url из унаследованного метода каждого подкласса.

2. @chepner, у каждого подкласса есть свой способ анализа URL и разных атрибутов.

3. Вместо pass этих методов в родительском, я бы рекомендовал вместо этого поднять NotImplementedError .

4. Если все, что вы пытаетесь сделать, это вызвать функцию super init , почему вы определяете функцию инициализации для дочерних классов? Любая неявно определенная функция будет унаследована от родительского класса.