class NoInstantiation: # "class NoInstantiation(object):" in Python 2.2+ or whatever
def __new__(cls):
"This class is not meant to be instantiated, so __new__ returns None."
return None
Это не остановит людей от переопределения этой функциональности, если они этого захотят, но это должен быть довольно приличный метод предотвращения случайной реализации.Если кто-то случайно позвонит, ну, они не могут сказать, что вы их не предупреждали.
РЕДАКТИРОВАТЬ: Если вы действительно хотите быть милым, вы можете также напечатать предупреждение для stderr в __new__()
оэто или даже выбросить исключение.
РЕДАКТИРОВАТЬ 2: Если вы идете по маршруту исключения, вы можете вместо этого вызвать исключение в методе __init__()
суперкласса, так как пользователи, вероятно, будут переопределять __init__()
в любом случае в их подклассах.
РЕДАКТИРОВАТЬ 3: Существует также возможность установки __new__
или __init__
равной None
, хотя результирующая ошибка не будет очень информативной.