The link doesn&#39;t answer the question, or at least I do not see the answer.<br><br>At first, I though that using the following approach would work<br><br><br>
class derived_wrap: public derived, public boost::python::wrapper&lt;derived&gt;&nbsp; {<br>
&nbsp; void method2() {....}<br>
};<br><br>class_&lt;derived_wrap, boost::noncopyable, bases&lt;base&gt;&gt;(&quot;derived&quot;) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;method2&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;derived::method2)<br>
&nbsp; ;<br>However in doing so the &quot;method1&quot; of the base class does not behave as expected.<br><br>That is to say, if in Python I do the following<br><br>class A(derived):<br>&nbsp;&nbsp; def method1(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......<br>
<br>and I pass A class back to C++, the method1 has not been overwritten!!!<br>method2 on the other hand works as expected.<br>Best<br>Luca<br><br>
<br><div><span class="gmail_quote">On 09/06/07, <b class="gmail_sendername">Roman Yakovenko</b> &lt;<a href="mailto:roman.yakovenko@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">roman.yakovenko@gmail.com
</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 6/7/07, Luca Sbardella &lt;<a href="mailto:luca.sbardella@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">luca.sbardella@gmail.com</a>&gt; wrote:<br>&gt; hi,<br>&gt; How do I expose properly a class tree so that classes can be derived from
<br>&gt; python in a polymorphic way?
<br>&gt; I&#39;ve approached the problem is the following way.<br>&gt;<br>&gt; class base&nbsp;&nbsp;{<br>&gt; public:<br>&gt;&nbsp;&nbsp; virtual void method1(){}<br>&gt; };<br>&gt;<br>&gt; class derived: public base&nbsp;&nbsp;{<br>&gt;&nbsp;&nbsp;public:<br>

&gt;&nbsp;&nbsp;&nbsp;&nbsp;virtual void method2(){}<br>&gt;&nbsp;&nbsp;};<br>&gt;<br>&gt; I then wrote two class templates to wrap the classes in the following way<br>&gt;<br>&gt; template&lt;class T&gt;<br>&gt; class base_wrap: public T, public boost::python::wrapper&lt;T&gt;&nbsp;&nbsp;{
<br>&gt;&nbsp;&nbsp; void method1() {....}<br>&gt; };<br>&gt;<br>&gt; template&lt;class T&gt;<br>&gt;&nbsp;&nbsp;class derived_wrap: public base_wrap&lt;T&gt; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;void method2() {....}<br>&gt;&nbsp;&nbsp;};<br>&gt;<br>&gt; And finally<br>&gt;
<br>&gt; class_&lt;base_wrap&lt;base&gt;, boost::noncopyable&gt;(&quot;base&quot;)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;method1&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;base::method1)<br>&gt;&nbsp;&nbsp; ;<br>&gt;<br>&gt; class_&lt;derived_wrap&lt;derived&gt;, boost::noncopyable&gt;(&quot;derived&quot;)
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;method1&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;derived::method1)&nbsp;&nbsp;&nbsp;&nbsp; &lt;======== this<br>&gt; seems redundant<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.def(&quot;method2&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;derived::method2)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;;
<br>
&gt;<br>&gt; This works fine, however I does&#39;t seem to be the optimal solution (see the<br>&gt; comment on class_&lt;derived_wrap&lt;derived&gt;&gt;).<br>&gt; Is there a better way?<br><br>Check this:<br><a href="http://boost.org/libs/python/doc/tutorial/doc/html/python/exposing.html#python.inheritance" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

http://boost.org/libs/python/doc/tutorial/doc/html/python/exposing.html#python.inheritance</a><br><br>--<br>Roman Yakovenko<br>C++ Python language binding<br><a href="http://www.language-binding.net/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://www.language-binding.net/
</a><br>_______________________________________________<br>C++-sig mailing list<br><a href="mailto:C++-sig@python.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">C++-sig@python.org</a><br><a href="http://mail.python.org/mailman/listinfo/c++-sig" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://mail.python.org/mailman/listinfo/c++-sig
</a><br></blockquote></div><br>