Ответ
Нет, в Python класс не может иметь несколько методов __init__. Если определить несколько методов с таким именем, последний переопределит предыдущие, и будет использоваться только он.
Однако существует несколько паттернов для реализации альтернативных конструкторов:
-
*Аргументы по умолчанию и `args
/kwargs`: Позволяют создавать объекты с разным набором параметров в одном методе__init__.class Point: def __init__(self, x, y=0): self.x = x self.y = y p1 = Point(5) # y будет 0 p2 = Point(3, 4) -
Методы класса (
@classmethod): Это стандартный и рекомендуемый способ создания "фабричных" методов, которые возвращают новый экземпляр класса.class User: def __init__(self, name: str, age: int): self.name = name self.age = age @classmethod def from_birth_year(cls, name: str, birth_year: int) -> 'User': """Альтернативный конструктор: создаёт User по году рождения.""" from datetime import datetime current_year = datetime.now().year age = current_year - birth_year return cls(name, age) @classmethod def from_dict(cls, data: dict) -> 'User': """Ещё один конструктор: создаёт User из словаря.""" return cls(data['name'], data['age']) # Использование user1 = User("Alice", 30) user2 = User.from_birth_year("Bob", 1994) user3 = User.from_dict({"name": "Charlie", "age": 25})
Таким образом, хотя прямой перегрузки __init__ нет, гибкость языка Python позволяет легко реализовать необходимое поведение через классовые методы.