2017-01-25 5 views
0

У меня есть целая группа классов, которые являются эффективными алгоритмами, и все они наследуются от класса Mechanism. Затем у меня есть класс MechanismStack, который содержит список кучи этих классов алгоритмов, все они взаимозаменяемы/модулярны - то есть вывод Mechanism1.encode() переходит в Mechanism2.encode() как вход и т. Д. (Фактически очередь функции).Разрешить доступ объекта к атрибуту своего объекта

Пара этих классов производит дополнительные данные, а не только выходные данные. Я хочу, чтобы хранить эти дополнительные данные в классе MechanismStack (который также является объект - существует множество различной стеки, состоящая из различных алгоритмов)

class MechanismStack: 
    self.stack = [Mechanism1(), Mechanism2(), Mechanism3()] 
    self.attribute = list() 
    def encode(self, input): 
     #process input through self.stack Mechanisms 

class Mechanism1(Mechanism): 
    def function(self, input): 
     #code 
     owningMechanismStack.attribute = ['some', 'list'] 

myStack = MechanismStack() 
myStack.encode('myInputString') 

ответ

1

Добавить в владеющей MechanismStack как свойство Mechanism, которую Вы предоставляете при вызове конструктор.

class Mechanism: 
    def __init__(self, owner): 
     this.owningMechanismStack = owner 

class MechanismStack: 
    self.stack = [Mechanism1(self), Mechanism2(self), Mechanism3(self)] 
    ... 
+0

Это была моя первая мысль и то, что я сейчас реализовал, однако я добавил ее только для Механизмов, которые генерируют дополнительные метаданные. Было бы лучше добавить владельца для всех или просто тех, кому нужен доступ к MechanismStack? – Aeroblop

+0

Возможно, это зависит от общего дизайна. Я сделал это в суперклассе, чтобы сохранить его гибким, чтобы «MechanismStack» не нуждался в деталях, для каких подклассов «Механизм» нужны обратные ссылки, а какие нет. – Barmar

Смежные вопросы