Question on ABC classes
Ethan Furman
ethan at stoneleaf.us
Thu Oct 22 17:03:41 EDT 2020
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~
More information about the Python-list
mailing list