Почему python вложенные классы третьего уровня не наследуются друг от друга? - PullRequest
0 голосов
/ 17 апреля 2020

Этот код действителен в python:

class Inner:
    class InnerInner:
        attr = 1

class Inner2(Inner):
    class InnerInner2(Inner.InnerInner):
        attr = 2

Почему следующее невозможно в python?

class Outer:
    class Inner:
        class InnerInner:
            attr = 1

    class Inner2(Inner):
        class InnerInner2(Inner.InnerInner):
            attr = 2

Это дает мне следующую ошибку:

class InnerInner2 (Inner.InnerInner): NameError: имя 'Inner' не определено

Я ожидаю, что Inner будет полностью определен до начала определения Inner2 .

1 Ответ

0 голосов
/ 17 апреля 2020

По той же причине это не получается:

class Foo:
    a = 1
    def bar(self):
        return a
Foo().bar()

Так же, как код внутри bar не может видеть ничего внутри области действия Foo, код внутри Inner2 не может видеть ничего из * 1007 Область действия *.

Inner полностью определяется точкой, в которой вы пытаетесь ее использовать, но она находится в области, к которой у вас нет доступа.

...