Steven D'Aprano <st...@pearwood.info>: > On Tue, 26 Apr 2016 06:25 pm, Marko Rauhamaa wrote: >> Check out some of the stdlib source code for example: >> >> ======================================================================== >> class ThreadPoolExecutor(_base.Executor): >> def __init__(self, max_workers): >> """Initializes a new ThreadPoolExecutor instance. >> >> Args: >> max_workers: The maximum number of threads that can be used to >> execute the given calls. >> """ >> self._max_workers = max_workers >> self._work_queue = queue.Queue() >> self._threads = set() >> self._shutdown = False >> self._shutdown_lock = threading.Lock() >> ======================================================================== >> >> Notice how _base.Executor.__init__(self) does not get called. > > What makes you think it needs to be called?
I would think that's somewhat of an axiom. Whenever I derive from a class, I consider it mandatory to delegate to its __init__ if my class specifies an __init__ itself. Otherwise, the underlying class must make a point to emphasize in its API documentation that __init__ is not needed. And the underlying class would be foolish to make such a contract because that would tie its hands in case the class needs refactoring in the future. Are you saying something else? See also <URL: https://docs.python.org/3/reference/datamodel.html?highlig ht=__init__#object.__init__>: If a base class has an __init__() method, the derived class’s __init__() method, if any, must explicitly call it to ensure proper initialization of the base class part of the instance I'm saying the derived class *must not* make any conclusions on the presence or absence of __init__ in the base class because that would be a gross violation of encapsulation. Marko -- https://mail.python.org/mailman/listinfo/python-list