I think I answered my own question after re-reading the annotation docs. Thanks.
On Sat, Jul 2, 2011 at 10:52 PM, Demetrius Cassidy <[email protected]>wrote: > CCing mailing list > > > On Sat, Jul 2, 2011 at 10:50 PM, Demetrius Cassidy > <[email protected]>wrote: > >> On Sat, Jul 2, 2011 at 10:45 PM, Phil Thompson < >> [email protected]> wrote: >> >>> On Sat, 2 Jul 2011 17:39:14 +0000, Demetrius Cassidy >>> <[email protected]> >>> wrote: >>> > I have a C++ class which is declared with pure virtual methods, but if >>> I >>> > derive from this class in python and implement the pure virtual >>> methods, >>> I >>> > get an exception: >>> > TypeError: pyvoip.opal.OpalPCSSEndPoint cannot be instantiated or >>> > sub-classed >>> > >>> > My python class is declared as following: >>> > >>> > class PCSSEndPoint(OpalPCSSEndPoint): >>> > def __init__(self): >>> > super(OpalPCSSEndPoint, self).__init__() >>> >>> That should be super(PCSSEndPoint, self).__init__() >>> >> >> The super thing was a typo. >> >>> >>> > def OnShowIncoming(self, connection): >>> > return True >>> > >>> > def OnShowOutgoing(self, connection): >>> > return True >>> > >>> > def GetMediaFormats(self): >>> > return [] >>> > >>> > >>> > SIP definitions: >>> > >>> > class OpalPCSSEndPoint : OpalLocalEndPoint /Abstract/ >>> > { >>> > >>> > /**Call back to indicate that remote is ringing. >>> > If false is returned the call is aborted. >>> > >>> > The default implementation is pure. >>> > */ >>> > virtual PBoolean OnShowIncoming( >>> > const OpalPCSSConnection & connection /NoCopy/ ///< Connection having >>> event >>> > ) = 0; >>> > >>> > /**Call back to indicate that remote is ringing. >>> > If false is returned the call is aborted. >>> > >>> > The default implementation is pure. >>> > */ >>> > virtual PBoolean OnShowOutgoing( >>> > const OpalPCSSConnection & connection /NoCopy/ ///< Connection having >>> event >>> > ) = 0; >>> > >>> > }; >>> > >>> > Now the base class of OpalPCSSEndPoint is also an ABC, as it derives >>> from >>> > an >>> > ABC but does not re-define the pure virtual function: >>> > >>> > class OpalLocalEndPoint : OpalEndPoint /Abstract/ >>> > { >>> > ... >>> > }; >>> > >>> > class OpalEndPoint /Abstract/ >>> > { >>> > virtual OpalMediaFormatList GetMediaFormats() const = 0; >>> > }; >>> > >>> > I tried removing /Abstract/ from OpalLocalEndPoint, but it made no >>> > difference. Any idea what's wrong in this scenario? The only way this >>> > works, is if I subclass OpalPCSSEndPoint in C++ and then in Python >>> create a >>> > class derived from my OpalPCSSEndPoint subclass. >>> >>> /Abstract/ is the cause of the problem. It doesn't mean that the C++ is >>> an >>> ABC, it means that the class contains other (unspecified) abstract >>> methods. >>> >>> Phil >>> >> >> So if /Abstract/ does not mean the class has pure virtual methods and >> cannot be instantiated itself, in which scenario should it be used? I'm a >> little confused here. >> >> >
_______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
