Как переопределить конструктор класса в Python?

Пользователь

от clifford , в категории: Python , 2 года назад

Как переопределить конструктор класса в Python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от NicolasSsh , 2 года назад

@clifford  Для переопределения конструктора класса у дочернего класса, нам достаточно воспользоваться функцией super().__init__() и определить свои входные данные для дочернего класса.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class X:
    def __init__(self, point : int, count : int):
        self.point = point
        self.count = count
    
class Y(X):
    def __init__(self, point : int, plane : int, count : int): # Переопределяем конструктор класса
        super().__init__(point, count) # Инициализируем переменные с родительского класса
        self.plane = plane


if __name__ == '__main__':
    y = Y(point = 5, plane = 1, count = 2) # Объявляем экземпляр класса
    print(y.point)
    print(y.plane)
    print(y.count)

# Вывод : 
# 5
# 1
# 2 

Пользователь

от marshall.cummings , год назад

@clifford 

В Python конструктор класса имеет имя __init__. Для переопределения конструктора класса необходимо создать новый метод с именем __init__ внутри определения класса.


Например, допустим, у вас есть класс Person с конструктором, который принимает имя и возраст человека:

1
2
3
4
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


Если вы хотите переопределить конструктор, чтобы он, кроме имени и возраста, принимал еще и город проживания, вы можете создать новый метод __init__ в классе Person, который будет принимать три аргумента:

1
2
3
4
5
class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city


Теперь при создании экземпляра класса Person нужно передавать три аргумента вместо двух:

1
person = Person("Alice", 25, "New York")


После выполнения этого кода переменная person будет содержать объект класса Person с именем "Alice", возрастом 25 и городом проживания "New York".