ich möchte für ein kleines Pluginsystem verschiedene Handler für meine Programme ermöglichen. Ich habe eine Grundklasse, von der jede Klasse meines Programms (Product, Transaction, etc.) abgeleitet wird.
Diese ist im Konkreten so aufgebaut:
Code: Alles auswählen
class CPClass(object):
    id = None
    actions = {"init": []}
    
    @reconstructor
    def __init__(self,**kwargs):
        for key,value in kwargs.iteritems():
            setattr(self,key,value)
    
    @hybrid_method
    def search(cls,condition=None,**kwargs):
        if condition:
            return session.query(cls).filter(condition)
        else:
            return session.query(cls).filter_by(**kwargs)
    
    @hybrid_method
    def search_one(cls,condition=None,**kwargs):
        return cls.search(condition=condition,**kwargs).one()
    
    @classmethod
    def on(cls,action,handler):
        try:
            cls.actions[action].append(handler)
        except KeyError:
            cls.actions[action] = list()
            cls.actions[action].append(handler)
Nun habe ich aber das Problem, dass wenn ich zum Beispiel auf das abgeleitete "Transaction" mittels on einen Handler registriere, dieser für alle anderen Klassen ebenso registriert ist, nicht nur für Transaction. Nach meiner Auffassung müsste das ja dann nur in Transaction.actions abgespeichert werden, wird so nun aber in CPClass.actions hinterlegt.
Wo habe ich da meinen Denkfehler?
Vielen Dank.

 Sehe ich es also richtig, dass ich die on-Methode behalten kann, aber dafür actions jedes Mal explizit festlegen muss?
 Sehe ich es also richtig, dass ich die on-Methode behalten kann, aber dafür actions jedes Mal explizit festlegen muss?