Как при инициализации класса передать аргументом этот же класс?
Хочу сделать тип данных, в котором используется этот же тип данных.
class Message:
def __init__(self, text: Message):
self.text = text
Такой код не хочет работать, есть ли какое-то решение?
Ответы (1 шт):
Автор решения: nomnoms12
→ Ссылка
Сейчас этот код вызывает исключение NameError. Так происходит потому, что Вы пытаетесь обратиться к типу Message. Но тип Message ещё не объявлен. Избежать ошибки можно, передав имя класса строкой:
class Message:
def __init__(self, text: 'Message'):
self.text = text
Но есть одна проблема — как Вы создадите первый экземпляр класса, если для его инициализации нужен другой экземпляр этого же класса? Предлагаю сделать параметр text необязательным:
class Message:
def __init__(self, text: 'Message'=None):
if text is not None:
self.text = text
message1 = Message()
message2 = Message(message1)