Объем вложенных классов?

OCaml:

let rec palindrome s =
  s = (tailrev s)

источник

113
задан martineau 14 March 2017 в 21:28
поделиться

2 ответа

Вы можете будет лучше, если вы просто не будете использовать вложенные классы. Если вы должны вложить, попробуйте следующее:

x = 1
class OuterClass:
    outer_var = x
    class InnerClass:
        inner_var = x

Или объявите оба класса перед их вложением:

class OuterClass:
    outer_var = 1

class InnerClass:
    inner_var = OuterClass.outer_var

OuterClass.InnerClass = InnerClass

(После этого вы можете del InnerClass , если вам нужно.)

20
ответ дан 24 November 2019 в 02:44
поделиться
class Outer(object):
    outer_var = 1

    class Inner(object):
        @property
        def inner_var(self):
            return Outer.outer_var

Это не совсем то же самое, что аналогичные вещи работают на других языках, и использует глобальный поиск вместо определения области доступа к external_var . (Если вы измените объект, к которому привязано имя Внешний , тогда этот код будет использовать этот объект при следующем выполнении.)

Если вместо этого вы хотите, чтобы все объекты Внутренние иметь ссылку на Outer , потому что external_var на самом деле является атрибутом экземпляра:

class Outer(object):
    def __init__(self):
        self.outer_var = 1

    def get_inner(self):
        return self.Inner(self)
        # "self.Inner" is because Inner is a class attribute of this class
        # "Outer.Inner" would also work, or move Inner to global scope
        # and then just use "Inner"

    class Inner(object):
        def __init__(self, outer):
            self.outer = outer

        @property
        def inner_var(self):
            return self.outer.outer_var

Обратите внимание, что классы вложенности несколько необычны в Python и автоматически не подразумевают каких-либо специальных отношения между классами. Лучше не влезать. (Вы по-прежнему можете установить атрибут класса на Внешний на Внутренний , если хотите.)

104
ответ дан 24 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: