#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 , почему вы определяете функцию инициализации для дочерних классов? Любая неявно определенная функция будет унаследована от родительского класса.