Не используются переменные из __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.
Дизайн, где предки зависят от потомков обречен на подобные ошибки.