[Python-de] kleines Embedding Problem

Georg Mischler schorsch at schorsch.com
Fri Apr 12 11:21:39 EDT 2002


Keule wrote:

> [...]
>
>  pargs  = Py_BuildValue("()");
>  pinst  = PyEval_CallObject(pclass, pargs);        /* call class() */
>  Py_DECREF(pclass);
>  Py_DECREF(pargs);
>
>  /* result = instance.method(x,y) */
>  pmeth  = PyObject_GetAttrString(pinst, "method"); /* fetch bound method */
>  Py_DECREF(pinst);
>  pargs  = Py_BuildValue("(ss)", arg1, arg2);       /* convert to Python */
>  pres   = PyEval_CallObject(pmeth, pargs);         /* call method(x,y) */
>  Py_DECREF(pmeth);
>  Py_DECREF(pargs);
>
> [...]
>
> In diesem Beispiel ist diese Klasseninstanz gebildet worden:
>
> object = module.klass()
>
> jetzt meine Frage:
> was würde sich an dem obigen C Code ändern, wenn ich eine Klasseninstanz
> mit Paramterübergabe entwerfen möchte, wie z.B. die folgende:
> object = module.klass(x,y,z)


Da koenntest du eigentlich gleich anhand deines Beispiels selber
drauf kommen. Da sind alle Zutaten schon vorhanden... ;)

Du benutzt zweimal die Funktion Py_BuildValue() um eine Liste von
Argumenten herzustellen. Das erste mal ist sie leer, weil dein
(impliziter) Konstruktor keine Argumente entgegennimmt, das zweite
mal enthaelt sie "arg1" und "arg2". Was genau hindert dich nun
daran, schon das erste mal ein nicht-leeres "pargs" zu verwenden?


Viel Spass!

-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch.com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/




More information about the Python-de mailing list