[Python-3000] Revised PEP 3119 (Abstract Base Classes) (original) (raw)
Collin Winter collinw at gmail.com
Wed May 16 02:38:42 CEST 2007
- Previous message: [Python-3000] Revised PEP 3119 (Abstract Base Classes)
- Next message: [Python-3000] Revised PEP 3119 (Abstract Base Classes)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 5/11/07, Guido van Rossum <guido at python.org> wrote:
- Overloading isinstance and issubclass is now a key mechanism rather than an afterthought; it is also the only change to C code required
- Built-in (and user-defined) types can be registered as "virtual subclasses" (not related to virtual base classes in C++) of the standard ABCs, e.g. Sequence.register(tuple) makes issubclass(tuple, Sequence) true (but Sequence won't show up in bases or mro).
(The bit about "issubclass(tuple, Sequence)" currently isn't true with the sandbox prototype, but let's assume that it is/will be.)
Given:
class MyABC(metaclass=ABCMeta): def foo(self): # A concrete method return 5
class MyClass(MyABC): # Mark as implementing the ABC's interface pass
a = MyClass() isinstance(a, MyABC) True # Good, I can call foo() a.foo() 5
MyABC.register(list) isinstance([], MyABC) True # Good, I can call foo() [].foo() Traceback (most recent call last): AttributeError: 'list' object has no attribute 'foo'
Have I missed something? It would seem that when dealing with ABCs that provide concrete methods, "isinstance(x, SomeABC) == True" is useless.
Collin Winter
- Previous message: [Python-3000] Revised PEP 3119 (Abstract Base Classes)
- Next message: [Python-3000] Revised PEP 3119 (Abstract Base Classes)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]