Message299810
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.) |
|
Date |
User |
Action |
Args |
2017-08-06 19:00:42 | Kevin Shweh | set | recipients:
+ Kevin Shweh, docs@python |
2017-08-06 19:00:42 | Kevin Shweh | set | messageid: <1502046042.43.0.230510870536.issue31127@psf.upfronthosting.co.za> |
2017-08-06 19:00:42 | Kevin Shweh | link | issue31127 messages |
2017-08-06 19:00:42 | Kevin Shweh | create | |
|