2017-01-25 86 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'不需要知道'Mechanism'子类需要返回引用的细节,哪些不需要。 – Barmar