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

Reply via email to