ow, was nog niet klaar Jawel
class CLIPSClass(object): callables = [] def __init__(self): for c in self.callables: clips.RegisterPythonFunction(c, c.__name__) @classmethod def clipsCallable(cls, f): cls.callables.append(f) class CLIPS(CLIPSClass): @CLIPSClass.clipsCallable def pyprint(self, value): self.data, "".join(map(str, value)) zoiets zou moeten werken > 2012/5/14 Schneider <f.schnei...@de-bleek.demon.nl> > >> Dat zou best wel eens kunnen. Dat zou betekenen dat iets met @.... >> helemaal niet gaat?**** >> >> ** ** >> >> Frans**** >> >> ** ** >> >> *Van:* python-nl-bounces+fs=de-bleek.demon...@python.org [mailto: >> python-nl-bounces+fs=de-bleek.demon...@python.org] *Namens *Dexter >> *Verzonden:* maandag 14 mei 2012 12:59 >> >> *Aan:* Dutch Python developers and users >> *Onderwerp:* Re: [python-nl] Decorator**** >> >> ** ** >> >> Ik denk dat dat komt omdat er nog geen instantie van de class CLIPS is op >> het moment dat de functie meegegeven wordt aan de decorator.**** >> >> 2012/5/14 Schneider <f.schnei...@de-bleek.demon.nl>**** >> >> Nop, doet het niet. Maar toch dank voor je suggestie.**** >> >> **** >> >> Frans**** >> >> **** >> >> *Van:* python-nl-bounces+fs=de-bleek.demon...@python.org [mailto: >> python-nl-bounces+fs=de-bleek.demon...@python.org] *Namens *Tikitu de >> Jager >> *Verzonden:* maandag 14 mei 2012 11:49 >> *Aan:* Dutch Python developers and users >> *Onderwerp:* Re: [python-nl] Decorator**** >> >> **** >> >> Met CLIPS heb ik geen ervaring, maar je decorator doet volgens mij meer >> dan echt nodig is. Ik zou zeggen:**** >> >> **** >> >> def clips_callable(f):**** >> >> clips.RegisterPythonFunction(f, f.__name__)**** >> >> return f**** >> >> **** >> >> Of dat je probleem oplost is een andere vraag...**** >> >> **** >> >> gr,**** >> >> Tikitu**** >> >> **** >> >> 2012/5/14 Schneider <f.schnei...@de-bleek.demon.nl>**** >> >> Dames, heren,**** >> >> **** >> >> Omdat ik weinig ervaring met decorators en multiprocessing heb, ben ik >> opzoek naar een beetje hulp.**** >> >> Ik maak gebruik van CLIPS via PyClips (http://pyclips.sourceforge.net/) >> waarbij CLIPS in een apart proces gestart wordt i.v.m. performance e.d. Om >> Python aan te kunnen roepen vanuit CLIPS, moeten de Python functies in >> CLIPS worden geregistreerd. **** >> >> Meest basale vorm zonder decorators.**** >> >> **** >> >> import clips**** >> >> import multiprocessing**** >> >> **** >> >> class *CLIPS*(object):**** >> >> def *__init__*(*self*, data):**** >> >> *self*.environment = clips.Environment()**** >> >> *self*.data = data**** >> >> clips.RegisterPythonFunction(*self*.pyprint, *"pyprint"*)**** >> >> *self*.environment.Load(*"test.clp"*)**** >> >> *self*.environment.Reset()**** >> >> *self*.environment.Run()**** >> >> def *pyprint*(*self*, value):**** >> >> print *self*.data, *""*.join(map(str, value))**** >> >> **** >> >> class *CLIPSProcess*(multiprocessing.Process):**** >> >> def *run*(*self*):**** >> >> p = multiprocessing.current_process()**** >> >> *self*.c = CLIPS(*"%s %s"* % (p.name, p.pid))**** >> >> pass**** >> >> **** >> >> if __name__ == *"__main__"*:**** >> >> cp = CLIPSProcess()**** >> >> cp.start()**** >> >> **** >> >> Inhoud van test.clp is:**** >> >> **** >> >> (defrule MAIN::start-me-up**** >> >> =>**** >> >> (python-call *pyprint* "Hello world")**** >> >> ) **** >> >> **** >> >> Output is CLIPSProcess-1 2456 Hello world**** >> >> Werkt goed. Nu wil ik heel wat “pyprint” achtige functies kunnen >> registreren via iets als:**** >> >> **** >> >> *@clips_callable***** >> >> def *pyprint*(*self*, value):**** >> >> …**** >> >> **** >> >> zonder dat ik steeds clips.RegisterPythonFunction hoef aan te roepen. Een >> simpele decorator zoals hieronder werkt niet:**** >> >> **** >> >> import clips**** >> >> import multiprocessing**** >> >> **** >> >> def *clips_callable*(f):**** >> >> from functools import wraps**** >> >> *@wraps*(f)**** >> >> def *wf*(*args, **kwargs):**** >> >> print *'calling {}'*.format(f.__name__)**** >> >> return f(*args, **kwargs)**** >> >> clips.RegisterPythonFunction(wf, f.__name__)**** >> >> return wf**** >> >> **** >> >> class *CLIPS*(object):**** >> >> def *__init__*(*self*, data):**** >> >> *self*.environment = clips.Environment()**** >> >> *self*.data = data**** >> >> #clips.RegisterPythonFunction(self.pyprint, "*pyprint*")**** >> >> *self*.environment.Load(*"test.clp"*)**** >> >> *self*.environment.Reset()**** >> >> *self*.environment.Run()**** >> >> *@clips_callable***** >> >> def *pyprint*(*self*, value):**** >> >> print *self*.data, *""*.join(map(str, value))**** >> >> **** >> >> class *CLIPSProcess*(multiprocessing.Process):**** >> >> def *run*(*self*):**** >> >> p = multiprocessing.current_process()**** >> >> *self*.c = CLIPS(*"%s %s"* % (p.name, p.pid))**** >> >> pass**** >> >> **** >> >> if __name__ == *"__main__"*:**** >> >> cp = CLIPSProcess()**** >> >> cp.start()**** >> >> **** >> >> Met als output **** >> >> **** >> >> calling pyprint**** >> >> **** >> >> De decorator doet duidelijk niet wat ik wil. Heeft iemand misschien een >> oplossing?**** >> >> **** >> >> Met vriendelijke groet,**** >> >> **** >> >> Frans**** >> >> **** >> >> >> _______________________________________________ >> Python-nl mailing list >> Python-nl@python.org >> http://mail.python.org/mailman/listinfo/python-nl**** >> >> ** ** >> >> _______________________________________________ >> Python-nl mailing list >> Python-nl@python.org >> http://mail.python.org/mailman/listinfo/python-nl >> >> >
_______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl