On 24.02.2017 01:19, Irv Kalb wrote:
Hi,
I have built a set of three classes:
-  A super class, let's call it: Base

-  A class that inherits from Base, let's call that: ClassA

-  Another class that inherits from Base, let's call that: ClassB

ClassA and ClassB have some code in their __init__ methods that set some 
instance variables to different values.  After doing so, they call the the 
__init__ method of their common super class (Base) to set some other instance 
variables to some common values.  This all works great.  Instances of ClassA 
and ClassB do just what I want them to.


[...]

If I can find a way to determine that the caller is attempting to instantiate 
Base directly, I will raise an exception.


A pattern I'm using sometimes to achieve this is:

class Base:
    def __init__(self):
        self.set_common()
        self.set_specific()

    def set_common(self):
        self.a = 10

    def set_specific(self):
        raise NotImplementedError()


class A(Base):
    def set_specific(self):
        self.b = 20


class B(Base):
    def set_specific(self):
        self.b = 30


Of course, MRAB's and Peter's suggestion are very similar ideas.

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to