|
From: Barry S. <ba...@ba...> - 2006-12-08 23:07:16
|
On Dec 8, 2006, at 17:07, carlos choy wrote:
> I looked at the Demo folder and found usage of the Callable
> interface in
> rangetext.cxx.
> In version 5.36, rangetest.cxx has the following lines (starting at
> line
> 29):
>
> *******************************************
> RangeSequence r2(1, 10, 2);
> if(r2[1] != Py::Int(3))
> return "RangeSequence check failed. ";
>
> debug_check_ref_queue();
>
> // calling an extension object method using getattr
> Py::Callable w(r2.getAttr("amethod"));
> Py::Tuple args(1);
> Py::Int j(3);
> args[0]=j;
> Py::List answer(w.apply(args));
> if(answer[0] != r2)
> return ("Extension object test failed (1)");
>
> if(answer[1] != args[0])
> return ("Extension object test failed (2)");
> *******************************************
>
> I see that RangeSequence is a class extending a python sequence.
> However, I
> don't see how "amethod" could be an attribute of it. "amethod" is
> a method
> of the range class, but this class seems to have nothing to do with
> RangeSequence. How is this method an attribute of the extended class?
RangeSequence is Py::Object that points to an instance of range. See
line 112 of range.hxx.
> Next, I see that 'w' is a Callable object, but I do not see how it
> can have
> an 'apply' method. Is the 'apply' method putting the arguments in
> 'args'
> into the method "amethod"?
It works the same way that apply builtin works in python. Call the
function that w contains
passing it args and store the returned value in answer.
>
> Lastly, I don't see at all how the Callable object is calling back
> into a
> python script.
The apply() functions calls into python.
>
> Can you please give me some explanations? Sorry if this all seems
> rather
> elementary, but I am trying my best to understand it.
No problem.
Barry
|