Положить данные в класс в классе

Есть класс, в котором есть класс(работаю с disnake, поэтому нельзя вытащить класс снаружи). Я не могу обозначить значения в классе. Как решить проблему?

class main():
    def __init__(self):
        self.a = 5
    class subMain():
        def __init__(self1):
            self1.a = self.a #Здесь выходит ошибка

Ошибка:

NameError: name 'self' is not defined. Did you mean: 'self1'?

Конечно, если написать class subMain(self) то тоже выходит ошибка, но ошибка NameError: name 'self' is not defined


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

Автор решения: Aidar

Для решения данной проблемы вам потребуется изменить структуру класса таким образом, чтобы вложенный класс subMain имел доступ к значениям извне.

Одним из возможных решений является передача ссылки на экземпляр внешнего класса main внутрь вложенного класса subMain. Это можно сделать, добавив аргумент parent к конструктору класса subMain и передавая в него ссылку на экземпляр класса main.

Вот пример исправленного кода:

class main():
    def __init__(self):
        self.a = 5
        self.sub = self.subMain(self)  # Передача ссылки на родительский класс
    
    class subMain():
        def __init__(self, parent):
            self.a = parent.a  # Доступ к значению "a" родительского класса
    
    def print_a(self):
        print(f"a = {self.a}")
        print(f"sub.a = {self.sub.a}")


m = main()
m.print_a()

Теперь класс subMain имеет доступ к значению a из родительского класса main.

→ Ссылка