On 10/22/20 9:25 AM, Julio Di Egidio wrote:
Now, I do read in the docs that that is as intended,
but I am not understanding the rationale of it: why
only if there are abstract methods defined in an ABC
class is instantiation disallowed? IOW, why isn't
subclassing from ABC enough?
Let's say you subclass from ABC:
class Abstract(ABC):
pass
Then you subclass from that:
class Concrete(Abstract):
pass
Then subclass from that:
class MoreConcrete(Concrete):
pass
If you do a
issubclass(<any of the above classes>, ABC)
you'll get
True
The idea behind abstract classes is the prevention of creating non-functional instances, which means if any abstract
methods, properties, etc., are present in an abstract class, then it's instances will not be fully functional;
contrariwise, if there are no abstract anythings in the class, then it is functional and there's no reason not to allow
it to be created.
Put another way: if ABC is anywhere in a class' parentage, then it is "abstract" -- the only way to tell if
instantiating it is okay is by the presence/absence of abstract pieces in the class.
--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list