У меня есть класс Paragraph:
from googletrans import Translator
class Paragraph:
def __init__(self, text, origin_lang='en'):
self.text = text
self.origin_lang = origin_lang
def translate(self, dest_lang='ne'):
translator = Translator()
translation = translator.translate(text = self.text,
dest=dest_lang)
return translation.text
Я сделал из него подкласс:
class FileParagraph(Paragraph):
def __init__(self, filepath):
super().__init__(text=self.get_from_file())
self.filepath = filepath
def get_from_file(self):
with open(self.filepath) as file:
return file.read()
В то время как Paragraph получил text
непосредственно в качестве аргумента, подкласс генерирует text
из метода get_from_file
.
Однако я не могу вызвать унаследованный метод translate
:
fp = FileParagraph("sample.txt")
print(fp.translate(dest_lang='de'))
Это приводит к ошибке:
Traceback (most recent call last):
File "C:/main.py", line 66, in <module>
fp = FileParagraph("sample.txt")
File "C:/main.py", line 20, in __init__
super().__init__(text=self.get_from_file())
File "C:/main.py", line 25, in get_from_file
with open(self.filepath) as file:
AttributeError: 'FileParagraph' object has no attribute 'filepath'
Одним из решений является изменение подкласса. init to:
def __init__(self, filepath):
self.filepath = filepath
self.text = self.get_from_file()
Однако это означает удаление инициализации super (). Есть ли другое решение без удаления super().__init__?
Или это даже не тот случай использования наследства?