#python #inheritance
#python #наследование
Вопрос:
У меня ошибка при использовании Python, но я не знаю, как ее исправить. У меня есть несколько классов, класс «Приложение», «Контроллер» и «Консоль». Консоль наследуется от контроллера, а контроллер наследуется от приложения.
консоль класса (контроллер): …
контроллер класса (приложение): …
класс App(): …
Контроллер класса имеет атрибут «команды», это список. Консоль класса имеет функцию «write_command», которая вызывает функцию контроллера.
Это класс «Консоль»
class Console(Controller):
def __new__(cls, *args, **kwargs):
return super(Console, cls).__new__(cls)
def __init__(self):
print('Init the console')
def __del__(self):
print('Destructor console')
def write_command(self):
command = input('Please write something: ')
if self.exit_from_console(command):
print('Bye')
else:
if self.is_valid_command(command):
print(super().do_something(0, command))
else:
print('Que vergüenza, estoy algo confundido')
self.write_command()
def is_valid_command(self, command):
# Check if command is valid
return super().validate_command(command)
@staticmethod
def exit_from_console(command):
if command == 'exit':
return True
else:
return False
Это код класса контроллера:
class Controller(App):
def __new__(cls, *args, **kwargs):
return super(Controller, cls).__new__(cls)
def __init__(self):
# Temp Command list. Get it from DB
self.commands = [('caminar', 'walk', 1),
('correr', 'run', 2),
('saltar', 'jump', 3),
('saludar', 'hello', 4),
('', '', 5),
('', '', 6),
('', '', 7)
]
self.users = ['0', 'System', 'Scenary']
print('Init de controller')
def validate_command(self, command):
# Search in local data base for command
found = False
the_commands = self.commands
for i in the_commands:
if i[0] == command.lower() or i[1] == command.lower():
found = True
break
return found
def get_commands(self):
pass
def do_something(self, user, command):
for item in self.commands:
if item[0] == command.lower or item[1] == command.lower:
return super().play(user, item[2])
return 'Nothing'
def get_commands(self):
return self.commands
И класс App, имеет функцию play()
Ошибка:
Ошибка атрибута: объект ‘Console’ не имеет атрибута ‘commands’
Это правда, но я использую этот атрибут не из консоли, а из класса контроллера, в котором он определен.
Спасибо!
PD: Прошу прощения, если это глупо, но я новичок в Python.
Комментарии:
1. Можете ли вы указать, как вы создаете экземпляр объекта и какую функцию вы вызываете?
2. и полная трассировка стека также была бы хороша
3. Вы не вызывали
Controller.__init__
изConsole.__init__
.
Ответ №1:
Вы не вызвали функцию инициализации для суперкласса, который вы должны вызвать:
super(Console, self).__init__()