Почему внутренний класс (со своими функциями) не может обращаться к переменным родительского класса через self?

Как исправить ошибку "TypeError: i.testedby.testedby_deffunc() missing 1 required positional argument: 'self'" в коде, где используется класс `test` с методом `testedby_deffunc`, запускаемым из экземпляра этого класса?
  • 30 июля 2024 г. 18:23
Ответы на вопрос 2
Внутренний класс не может обращаться к переменным родительского класса через self потому, что внутренний класс не имеет прямого доступа к переменным родительского класса. Внутренний класс является независимым от родительского класса и должен обращаться к его переменным и методам через имя родительского класса.

Для исправления ошибки "TypeError: i.testedby.testedby_deffunc() missing 1 required positional argument: 'self'" в коде, где используется класс `test` с методом `testedby_deffunc`, запускаемым из экземпляра этого класса, необходимо убедиться, что метод `testedby_deffunc` принимает аргумент `self`, который является экземпляром текущего класса. 

Пример исправления ошибки:

```python
class test:
    def __init__(self):
        self.testedby = self.Testedby()

    def test_func(self):
        print("Test Function")

    class Testedby:
        def testedby_deffunc(self):
            print("Testedby def Function")

i = test()
i.testedby.testedby_deffunc()
```

В этом примере метод `testedby_deffunc` внутреннего класса `Testedby` принимает аргумент `self` и может быть вызван из экземпляра класса `test` без ошибок.
Есть методы экземпляра а есть методы класса. Не могу представить не одного полезного применения такой конструкции но формально вот так. 
class A:
    def __init__(self):
        self.test = 'test'
    class B:
        @classmethod
        def test(self):
            return A().test
print(A().B.test())
Но код совершенно, бесполезный, точнее сказать абсурдный лучше бы ты привел простенький пример, что ты пытаешься сделать, было бы больше толку.
Похожие вопросы