At 12:16 PM 5/1/2007 -0400, Joel Bender wrote: >So issubclass(D, C) would call D.__issubclass__(C) or >C.__rissubclass__(D) and leave it up to the programmer.
Yes, except there's only the '__r__' versions and they're not called that. > The former is >"somebody is checking to see if I inherit some functionality" and the >latter is "somebody is checking to see if something is a proper derived >class of me". > > class A(object): > @classmethod > def __rissubclass__(cls, subcls): > if not object.__rissubclass__(cls, subcls): > return False > return subcls.f is not A.f > > def f(self): > raise RuntimeError, "f must be overridden" > > class B(A): > def g(self): print "B.g" > > class C(A): > def f(self): print "C.f" > >Now my testing can check issubclass(B, A) and it will fail because B.f >hasn't been provided, but issubclass(C, A) passes. I don't have to call >B().f() and have it fail, it might be expensive to create a B(). Right; you've just pointed out something important that hasn't been stated until now. The objections to this extension have focused on the idea that this makes type checking less strict, but you've just demonstrated that it can actually be used to make it *more* strict. I hadn't thought of that. _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
