Для тех, кто не знаком с java, нестатические внутренние классы - это классы, в которых объекты имеют ссылку на внешний объект, из которого он был создан.
Это, конечно, может быть реализовано в python путем создания класса в конструкторе.Например:
>>> class Outer:
... def __init__(self):
... class inner:
... _outer = self
... self.Inner = Inner
>>> outer = Outer()
>>> inner = outer.Inner()
>>> outer
<__main__.Outer object at 0x7f61f9d8e978>
>>> inner._outer
<__main__.Outer object at 0x7f61f9d8e978>
Я попытался определить его более понятным способом, определив его в теле класса.Например:
def nonstatic(cls):
def ctor(*args, **kwds):
return cls(*args, **kwds)
return ctor
class Outer:
@nonstatic
class Inner:
pass
Какой тип работы, но это не очень гибкое решение.Например, Outer (). Inner - это просто конструктор, а не тип.Это также подразумевает, что это решение будет запрещать наследование от класса Inner.
Теперь вопрос, есть ли решение, где оно может быть определено в этой точке?Или такая попытка обречена на провал?Я склонен думать, что это обречено, но я хотел бы аргумент, почему это (или это просто будет грязно?).
Я не упоминал об этом, но я смотрюнемного для решения, где внутренний класс может быть создан с внешним объектом в качестве неявного аргумента, точно так же, как методы (то есть outer = inner.Outer()
)