<div dir="ltr">Hi,<div><br></div><div>I have the following isse with C++/Python inheritance:</div><div>e.g.</div><div>base class: class Vehicle { }</div><div>derived classes: motorcycle, car { int wheelCount = 4 }, truck, plane, train, etc.</div>
<div>class VehicleStore {</div><div>   vector<Vehicle> vehicleList;</div><div>}</div><div><br></div><div>In my python interface, I want to access VehicleStore.vehicleList[0] (Or get a list of all the Car Vehicles)</div>
<div><br></div><div><div>In C++ I can access the derived class functions as follows:</div><div>Vehicle* v = &vehicleStore.vehicleList[0];</div><div>Car* c = dynamic_cast<Car*>(v);</div><div>if(c == null) return; // the vehicle is not a car.</div>
<div>// the vehicles' Car specific properties and methods can now be accessed.</div><div>result = c.wheelCount; // result = 4;</div><div><br></div><div>In the SIP generated Python code VehicleStore.vehicleList is a python list containing python objects of type vehicle. When accessing a vehicle directly form the list, I get a python object of type vehicle back, not the derived type. The derived type specific members cannot be accessed, only the base (super) class' can. This makes sense, python was never told that the object is a derived type, only of type Vehicle.</div>
<div>E.g.</div><div>s = vehicleStore()</div><div>s.vehcileList = {car(), plane(), truck(), motorcycle()}</div><div>.</div><div>.</div><div>.</div><div>car = s.vehcileList[0];<br></div><div>print(car.wheelCount) # Error the attribute wheelCount does not exist in type Vehicle.</div>
<div><br></div><div>I however want to access the derived type in Python. The only way I see this to be possible is to instruct VehicleStore's .sip code's vehicleList's %AccessCode to return the vehicleList python object containing types pointing to the correct derived type, instead of just to the super type.</div>
<div>This is tricky as I will need to make use of some reflection. (I can't hardcode checks for the types of vehivles it, as a library may be plugged in specifying new types of vehicles, unbeknownst to me).</div><div>
<br></div><div>Is there perhaps an simpler and easier solution, perhaps SIP is already addressing this and I am unaware of it. Is there perhaps code generated by SIP that may help me find all the classes derived from a super(base) class?</div>
<div><br></div><div>Regards,<br></div><span style="color:rgb(51,51,51);font-family:verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif;font-size:14.44444465637207px;background-color:rgb(255,255,255)">Christoff</span></div>
</div>