Не используются переменные из __init__ в классе

При вызове класса Morse() появляется такая ошибка, хотя все переменные написаны правильно:

AttributeError: 'MyWidget' object has no attribute 'o'

Код:

class Morse(MyWidget):
    def __init__(self):
        self.o = []
        self.rus_to_morse = {'а': '.-',
                    'б': '-...',
                    'в': '.--',
                    'г': '--.',
                    'д': '-..',
                    'е': '.',
                    'ж': '...-',
                    'з': '--..',
                    'и': '..',
                    'й': '.---',
                    'к': '-.-',
                    'л': '.-..',
                    'м': '--',
                    'н': '-.',
                    'о': '---',
                    'п': '.--.',
                    'р': '.-.',
                    'с': '...',
                    'т': '-',
                    'у': '..-',
                    'ф': '..-.',
                    'х': '....',
                    'ц': '-.-.',
                    'ч': '---.',
                    'ш': '----',
                    'щ': '--.-',
                    'ъ': '.--.-.',
                    'ы': '-.--',
                    'ь': '-..-',
                    'э': '..-..',
                    'ю': '..--',
                    'я': '.-.-'}

    def convert(self, wordd):
        for i in wordd.split():
            self.o.append("".join(self.rus_to_morse[simv] for simv in i.lower()))
        self.output.setText(" ".join(self.o))

class MyWidget(QtWidgets.QMainWindow, Ui_form):
     def __init__(self):
         super().__init__()
         self.setupUi(self)
         self.run_button.clicked.connect(self.run)
     def run(self):
         if self.encrypt.isChecked():
             if self.comboBox.activated[str]:
                 Morse.convert(self, self.input.toPlainText())

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Morse.convert вызван из конструктора родительского класса MyWidget. То есть, он вызван до вызова конструктора Morse (конструкторы вызываются от предков к потомкам). А в этот момент поля self.o не существует.

Кроме того он вызывается для чужого экземпляра self. У MyWidget могут быть и другие потомки, кроме Morse.

Дизайн, где предки зависят от потомков обречен на подобные ошибки.

→ Ссылка