Как при инициализации класса передать аргументом этот же класс?

Хочу сделать тип данных, в котором используется этот же тип данных.

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)
→ Ссылка