[C++-sig] Re: pyste: current cvs/1_30_00 difference in treatment of overloaded members
Nicodemus
nicodemus at globalite.com.br
Sun May 18 03:17:38 CEST 2003
Thanks for the replies so far David, your help is very appreciated!
David Abrahams wrote:
>Oh, sorry. You can of course stick a function in A_Wrapper which gets
>you &A::name:
>
> static char const* (A::*a_name())() { return &A::name; }
>
Hmm... I did that, and added this line to the wrapper:
.def("name", A_Wrapper::a_name(), &A_Wrapper::default_name)
And in Python:
>>> from test import *
>>> A()
<test.A object at 0x008B8560>
>>> a = A()
>>> a.name()
'foo'
>>> a.get_name()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ReferenceError: Attempt to return dangling pointer to object of type: char
>>>
Perhaps am I doing something wrong?
>>>I think trying to get Python A instances not to have a name method is
>>>sort of unpythonic, but be that as it may...
>>> To get overridability, you need to implement A_Wrapper::name() so
>>>that
>>>it dispatches into Python. If you don't want to expose a "name"
>>>attribute, you'd better implement A_Wrapper::name() something like
>>>this:
>>>
>>> char const* name()
>>> {
>>> if (PyObject_HasAttrString(this->self, "name"))
>>> return boost::python::call_method<char const*>(self, "name");
>>> else
>>> return A::name();
>>> }
>>>
>>>
>>That's what I thought...
>>
>
>But it seems like that's not the solution you're looking for.
>Unfortunately Python doesn't let you say "who's asking?" before giving
>out an attribute value, so you can't hide A.name from everything
>that's not a derived class of A.
>
This solution would be perfect, except that the Python class can't
access the default implementation of the method, which is a quite common
need. 8/
>>I wanted to know how to expose the default implementation of
>>protected virtual methods, and also how should Pyste handle them. I
>>saw two options: export them normaly, just like a public method; or
>>override the function and inside it check if the python object has
>>reimplemented it, otherwise call the default implementation. I
>>wanted to discuss here in the list what would be the best method,
>>that's all.
>>
>
>OK, I understand now. I hope I helped a little at least.
>
Of course you did. Thanks again,
Nicodemus.
More information about the Cplusplus-sig
mailing list