Автор оригинала: Pankaj Kumar.
Конструктор класса Python – Python __init __ () Функция
Функция функции конструктора Python Class – это инициализировать экземпляр класса. Python __init __ () – функция конструктора для классов в Python.
Python __init __ () Функциональный синтаксис
Синтаксис функции __init __ ():
def __init__(self, [arguments])
- Ключевое слово def используется для определения его, потому что это Функция Отказ
- Первый аргумент относится к текущему объекту. Это связывает экземпляр к методу init (). Обычно названо «я», чтобы следовать в Конвенции именования. Вы можете прочитать больше об этом на Python самоуправление Отказ
- Аргументы метода INIT () являются необязательными. Мы можем определить конструктор с любым количеством аргументов.
Примеры конструктора класса Python
Давайте посмотрим на некоторые примеры функции конструктора в разных сценариях.
1. класс без конструктора
Мы можем создать класс без определения конструктора. В этом случае конструктор SuperClass вызывается для инициализации экземпляра класса. объект
Класс – это основа всех классов в Python.
class Data: pass d = Data() print(type(d)) #
Вот еще один пример, чтобы подтвердить, что конструктор SuperClass вызывается для инициализации экземпляра подкласса.
class BaseData: def __init__(self, i): print(f'BaseData Constructor with argument {i}') self.id = i class Data(BaseData): pass d = Data(10) print(type(d))
Выход:
BaseData Constructor with argument 10
2. Простой конструктор без аргументов
Мы можем создать конструктор без каких-либо аргументов. Это полезно для целей регистрации, таких как сохранение подсчета экземпляров класса.
class Data1: count = 0 def __init__(self): print('Data1 Constructor') Data1.count += 1 d1 = Data1() d2 = Data1() print("Data1 Object Count =", Data1.count)
Выход:
Data1 Constructor Data1 Constructor Data1 Object Count = 2
3. Конструктор класса с аргументами
Большую часть времени вы найдете функцию конструктора с некоторыми аргументами. Эти аргументы обычно используются для инициализации переменных экземпляров.
class Data2: def __init__(self, i, n): print('Data2 Constructor') self.id = i self.name = n d2 = Data2(10, 'Secret') print(f'Data ID is {d2.id} and Name is {d2.name}')
Выход:
Data2 Constructor Data ID is 10 and Name is Secret
4. Класс конструктор с наследством
class Person: def __init__(self, n): print('Person Constructor') self.name = n class Employee(Person): def __init__(self, i, n): print('Employee Constructor') super().__init__(n) # same as Person.__init__(self, n) self.id = i emp = Employee(99, 'Pankaj') print(f'Employee ID is {emp.id} and Name is {emp.name}')
Выход:
Employee Constructor Person Constructor Employee ID is 99 and Name is Pankaj
- Наша обязанность называть конструктор SuperClass.
- Мы можем использовать функцию Super () для вызова функции конструктора SuperClass.
- Мы также можем использовать имя SuperClass, чтобы вызвать его метод init ().
5. Конструктор цепи с многоуровневым наследством
class A: def __init__(self, a): print('A Constructor') self.var_a = a class B(A): def __init__(self, a, b): super().__init__(a) print('B Constructor') self.var_b = b class C(B): def __init__(self, a, b, c): super().__init__(a, b) print('C Constructor') self.var_c = c c_obj = C(1, 2, 3) print(f'c_obj var_a={c_obj.var_a}, var_b={c_obj.var_b}, var_c={c_obj.var_c}')
Выход:
A Constructor B Constructor C Constructor c_obj var_a=1, var_b=2, var_c=3
6. Конструктор с несколькими наследованием
Мы не можем использовать Super () для доступа к всем суперклассам в случае нескольких наследований. Лучшим подходом было бы позвонить конструктору функции суперкласс, используя имя своего класса.
class A1: def __init__(self, a1): print('A1 Constructor') self.var_a1 = a1 class B1: def __init__(self, b1): print('B1 Constructor') self.var_b1 = b1 class C1(A1, B1): def __init__(self, a1, b1, c1): print('C1 Constructor') A1.__init__(self, a1) B1.__init__(self, b1) self.var_c1 = c1 c_obj = C1(1, 2, 3) print(f'c_obj var_a={c_obj.var_a1}, var_b={c_obj.var_b1}, var_c={c_obj.var_c1}')
Выход:
C1 Constructor A1 Constructor B1 Constructor c_obj var_a=1, var_b=2, var_c=3
Python не поддерживает несколько конструкторов
Python не поддерживает несколько конструкторов, в отличие от других популярных объектно-ориентированных языков программирования, таких как Java.
Мы можем определить несколько методов __init __ (), но последний переопределят более ранние определения.
class D: def __init__(self, x): print(f'Constructor 1 with argument {x}') # this will overwrite the above constructor definition def __init__(self, x, y): print(f'Constructor 1 with arguments {x}, {y}') d1 = D(10, 20) # Constructor 1 with arguments 10, 20
Может ли Python __init __ () Функция что-нибудь вернуть?
Если мы попытаемся вернуть значение без значения из функции __init __ (), она будет поднять JypeError.
class Data: def __init__(self, i): self.id = i return True d = Data(10)
Выход:
TypeError: __init__() should return None, not 'bool'
Если мы изменим оператор возврата в вернуть ни один
Затем код будет работать без каких-либо исключения.