То, что делает этот код, эквивалентно тому, что вообще не определяется первое __init__
(оно сразу же заменяется вторым, и его больше никогда не видят).
Вы можете получить что-то похожее на оба поведения, используя только первый конструктор и задав для всех параметров значение по умолчанию None
:
def __init__(self, host=None, port=None, user=None, dept=None):
self._dept = dept
self._host = host
self._port = port
self._user = user
, что также позволило бы предоставить некоторые аргументы, но не все. Для более сложных случаев определите альтернативный конструктор как @classmethod
(методы класса существуют главным образом для реализации альтернативных конструкторов), где он преобразует (или предоставляет) свои собственные аргументы в аргументы, ожидаемые первичным конструктором, затем заканчивается return cls(expected, arguments, here)
:
class buildArgs:
def __init__(self, host, port, user, dept):
self._dept = dept
self._host = host
self._port = port
self._user = user
@classmethod
def from_the_void(cls):
return cls(None, None, None, None)