New submission from Kevin Shweh:

The only check that prevents instantiating abstract classes is in 
object.__new__, but most built-in classes never actually call object.__new__. 
That means you can do stuff like

import abc

class Foo(list, metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def abstract(self):
                pass

Foo()

and the Foo() call will silently succeed.

Ideally, the Foo() call should fail. Other options include having the Foo class 
definition itself fail, or just making a note in the documentation describing 
the limitation. (As far as I can see, this is currently undocumented.)

----------
assignee: docs@python
components: Documentation, Library (Lib)
messages: 299810
nosy: Kevin Shweh, docs@python
priority: normal
severity: normal
status: open
title: Abstract classes derived from built-in classes don't block instance 
creation
type: behavior
versions: Python 2.7, Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue31127>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to