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 <[email protected]>
>
>> Dat zou best wel eens kunnen. Dat zou betekenen dat iets met @....
>> helemaal niet gaat?****
>>
>> ** **
>>
>> Frans****
>>
>> ** **
>>
>> *Van:* [email protected] [mailto:
>> [email protected]] *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 <[email protected]>****
>>
>> Nop, doet het niet. Maar toch dank voor je suggestie.****
>>
>> ****
>>
>> Frans****
>>
>> ****
>>
>> *Van:* [email protected] [mailto:
>> [email protected]] *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 <[email protected]>****
>>
>> 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
>> [email protected]
>> http://mail.python.org/mailman/listinfo/python-nl****
>>
>> ** **
>>
>> _______________________________________________
>> Python-nl mailing list
>> [email protected]
>> http://mail.python.org/mailman/listinfo/python-nl
>>
>>
>
_______________________________________________
Python-nl mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-nl