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
