Sie könnten using the abc
Abstract Base Class module betrachten __init__
als abstrakt zu markieren, und dann gehen Sie vor und die Super __init__
aus der Unterklasse aufrufen (und, wie DorElias suggested, geben die Super __init__
eine triviale Implementierung von pass
):
from abc import ABCMeta, abstractmethod
class AbstractBase(object, metaclass=ABCMeta):
@abstractmethod # This method must be overridden...
def __init__(self):
print("...but can still be called via super by subclasses have shared construction logic")
pass
class RealChild(AbstractBase):
def __init__(self):
super().__init__() # Won't do anything, UNTIL the day you decide all subclasses of AbstractBase need shared logic
print('do stuff')
child = RealChild()
wenn Sie über parent = AbstractBase()
oder parent = AbstractBase.__new__(AbstractBase)
zu instanziiert versuchen, erhalten Sie eine Fehlermeldung erhalten:
TypeError: Can't instantiate abstract class AbstractBase with abstract methods init
Sie haben also Ihre unantastbare abstrakte Sicherheit, aber gleichzeitig sind Sie immer noch in der Lage, alle Kindklassenkonstruktionen zu ändern, indem Sie die Basisklassenkonstruktion ändern, wie es richtig und richtig ist.
Related: http://stackoverflow.com/questions/14972631/python-abstract-classes-how-to-discourage-instantiation – juanchopanza