Я видел несколько «решений» для этого, но решение каждый раз кажется таким: «Не используйте вложенные классы, определите классы снаружи, а затем используйте их как обычно ". Мне не нравится этот ответ, потому что он игнорирует основную причину, по которой я выбрал вложенные классы, а именно наличие пула констант (связанных с базовым классом), доступного для всех созданных экземпляров подкласса.
Здесь это пример кода:
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? Нет возможности получить доступ к информации о родителях?