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