Delaney, Timothy (Tim) wrote: > Peter Hansen wrote: > >> Change those to "raise NotImplementedError('blah')" instead and you'll >> be taking the more idiomatic approach. > > One thing I've noticed, which I may raise on python-dev ... > NotImplementedError does *not* play well with super() ... > > class A (object): > def test (self): > raise NotImplementedError > > class B (object): > def test (self): > print 'B' > super(B, self).test() > > class C (B, A): > def test (self): > print 'C' > super(C, self).test() > > It's actually worse than AttributeError, because the method actually > exists. In both cases though you need to know when you create the base > class how it's going to be used to work out whether a super() call is > needed. > > One option is to do a try: except (AttributeError, NotImplementedError). > Yuk - talk about hiding errors :(
Hm... one could return NotImplemented from the abstract method. It won't raise an error immediately, but will certainly be discovered at some point. Not optimal though. Reinhold -- http://mail.python.org/mailman/listinfo/python-list