Я видел несколько «решений» для этого, но каждый раз кажется, что решение «Не используйте вложенные классы, определяйте классы снаружи, а затем используйте их как обычно». Мне не нравится этот ответ, потому что он игнорирует основную причину, по которой я выбрал вложенные классы, а именно наличие пула констант (связанных с базовым классом), доступных для всех создаваемых экземпляров подкласса.
Вот пример кода:
class ParentClass:
constant_pool = []
children = []
def __init__(self, stream):
self.constant_pool = ConstantPool(stream)
child_count = stream.read_ui16()
for i in range(0, child_count):
children.append(ChildClass(stream))
class ChildClass:
name = None
def __init__(self, stream):
idx = stream.read_ui16()
self.name = constant_pool[idx]
Всем классам передается один параметр, который является пользовательским классом битового потока. Мое намерение состоит в том, чтобы иметь решение, которое не требует от меня чтения значения idx для ChildClass, пока он находится в ParentClass. Все потоковые чтения дочернего класса должны выполняться в дочернем классе.
Этот пример слишком упрощен. Постоянный пул - не единственная переменная, которая мне нужна для всех подклассов. Переменная idx - не единственное, что читается из потокового ридера.
Возможно ли это даже в python? Нет ли способа получить доступ к информации родителя?