Рубрики
Без рубрики

Конструктор класса Python – Python __init __ () Функция

Функция функции конструктора Python Class – это инициализировать экземпляр класса. Python __init __ () – функция конструктора для классов в Python.

Автор оригинала: 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'

Если мы изменим оператор возврата в вернуть ни один Затем код будет работать без каких-либо исключения.

Рекомендации: