Как создать конструктор класса а в python

Работа с конструкторами в Python

Конструктор в Python – это особый тип метода (функции), который используется для инициализации членов экземпляра класса.

В C ++ или Java конструктор имеет то же имя, что и его класс, в Python конструктор обрабатывается по-разному. Он используется для создания объекта.

Конструкторы бывают двух типов:

  1. Параметризованный конструктор
  2. Непараметрический конструктор

Определение конструктора выполняется, когда мы создаем объект этого класса. Конструкторы также проверяют, что у объекта достаточно ресурсов для выполнения любой задачи запуска.

Создание конструктора на Python

В Python метод __init __() имитирует конструктор класса. Этот метод вызывается при создании экземпляра класса. Он принимает ключевое слово self в качестве первого аргумента, который позволяет получить доступ к атрибутам или методу класса.

Мы можем передать любое количество аргументов во время создания объекта класса, в зависимости от определения __init __(). В основном он используется для инициализации атрибутов класса. У каждого класса должен быть конструктор, даже если он просто полагается на конструктор по умолчанию.

Рассмотрим следующий пример для инициализации атрибутов класса Employee при работе с конструкторами в Python.

Подсчет количества объектов класса

Конструктор вызывается автоматически, когда мы создаем объект класса. Рассмотрим следующий пример.

Непараметрический

Непараметрический конструктор используется, когда мы не хотим манипулировать значением, или конструктором, который имеет только self в качестве аргумента. Разберем на примере.

Параметризованный конструктор Python

У параметризованного конструктора есть несколько параметров вместе с самим собой.

Конструктор Python по умолчанию

Когда мы не включаем конструктор в класс или забываем его объявить, он становится конструктором по умолчанию. Он не выполняет никаких задач, а инициализирует объекты. Рассмотрим пример.

Более одного конструктора в одном классе

Давайте посмотрим на другой сценарий, что произойдет, если мы объявим два одинаковых конструктора в классе.

В приведенном выше коде объект st вызвал второй конструктор, тогда как оба имеют одинаковую конфигурацию. Первый метод недоступен для объекта st. Внутренне объект класса всегда будет вызывать последний конструктор, если у класса есть несколько конструкторов.

Примечание. Перегрузка конструктора в Python запрещена.

Встроенные функции классов Python

Встроенные функции, определенные в классе, описаны в следующей таблице.

SN Функция Описание
1 getattr(obj,name,default) Используется для доступа к атрибуту объекта.
2 setattr(obj, name,value) Она используется для установки определенного значения для определенного атрибута объекта.
3 delattr (obj, name) Необходима для удаления определенного атрибута.
4 hasattr (obj, name) Возвращает истину, если объект содержит определенный атрибут.

Встроенные атрибуты класса

Наряду с другими атрибутами класс Python также содержит некоторые встроенные атрибуты класса, которые предоставляют информацию о классе.

Класс и объект в Python

Python — это процедурно-ориентированный и одновременно объектно-ориентированный язык программирования.

Процедурно-ориентированный

«Процедурно-ориентированный» подразумевает наличие функций. Программист может создавать функции, которые затем используются в сторонних скриптах.

Объектно-ориентированный

«Объектно-ориентированный» подразумевает наличие классов. Есть возможность создавать классы, представляющие собой прототипы для будущих объектов.

Создание класса в Python

Синтаксис для написания нового класса:

  • Для создания класса пишется ключевое слово class , его имя и двоеточие (:). Первая строчка в теле класса описывает его. (По желанию) получить доступ к этой строке можно с помощью ClassName.__doc__
  • В теле класса допускается объявление атрибутов, методов и конструктора.

Атрибут:

Атрибут — это элемент класса. Например, у прямоугольника таких 2: ширина ( width ) и высота ( height ).

Метод:

  • Метод класса напоминает классическую функцию, но на самом деле — это функция класса. Для использования ее необходимо вызывать через объект.
  • Первый параметр метода всегда self (ключевое слово, которое ссылается на сам класс).

Конструктор:

  • Конструктор — уникальный метод класса, который называется __init__ .
  • Первый параметр конструктора во всех случаях self (ключевое слово, которое ссылается на сам класс).
  • Конструктор нужен для создания объекта.
  • Конструктор передает значения аргументов свойствам создаваемого объекта.
  • В одном классе всегда только один конструктор.
  • Если класс определяется не конструктором, Python предположит, что он наследует конструктор родительского класса.

Создание объекта с помощью класса Rectangle:

Создание объекта с помощью класса Rectangle

Расчет площади класса Rectangle

Что происходит при создании объекта с помощью класса?

При создании объекта класса Rectangle запускается конструктор выбранного класса, и атрибутам нового объекта передаются значения аргументов. Как на этом изображении:

Конструктор выбранного класса

Конструктор с аргументами по умолчанию

В других языках программирования конструкторов может быть несколько. В Python — только один. Но этот язык разрешает задавать значение по умолчанию.

Все требуемые аргументы нужно указывать до аргументов со значениями по умолчанию.

Конструктор с аргументами по умолчанию

Сравнение объектов

В Python объект, созданный с помощью конструктора, занимает реальное место в памяти. Это значит, что у него есть точный адрес.

Если объект AA — это просто ссылка на объект BB , то он не будет сущностью, занимающей отдельную ячейку памяти. Вместо этого он лишь ссылается на местоположение BB .

Как происходит сравнение объектов

Оператор == нужен, чтобы узнать, ссылаются ли два объекта на одно и то же место в памяти. Он вернет True , если это так. Оператор != вернет True , если сравнить 2 объекта, которые ссылаются на разные места в памяти.

Сравнение объектов

Атрибуты

В Python есть два похожих понятия, которые на самом деле отличаются:

  1. Атрибуты
  2. Переменные класса

Стоит разобрать на практике:

Атрибут

Объекты, созданные одним и тем же классом, будут занимать разные места в памяти, а их атрибуты с «одинаковыми именами» — ссылаться на разные адреса. Например:

Объекты одного класса занимают разные места в памяти

Изменение значений атрибутов

Python умеет создавать новые атрибуты для уже существующих объектов. Например, объект player1 и новый атрибут address .

Встроенные атрибуты класса

Объекты класса — дочерние элементы по отношению к атрибутам самого языка Python. Таким образом они заимствуют некоторые атрибуты:

Атрибут Описание
__dict__ Предоставляет данные о классе коротко и доступно, в виде словаря
__doc__ Возвращает строку с описанием класса, или None , если значение не определено
__class__ Возвращает объект, содержащий информацию о классе с массой полезных атрибутов, включая атрибут __name__
__module__ Возвращает имя «модуля» класса или __main__ , если класс определен в выполняемом модуле.

Переменные класса

Переменные класса в Python — это то же самое, что Field в других языках, таких как Java или С#. Получить к ним доступ можно только с помощью имени класса или объекта.

Для получения доступа к переменной класса лучше все-таки использовать имя класса, а не объект. Это поможет не путать «переменную класса» и атрибуты.

Переменные класса

У каждой переменной класса есть свой адрес в памяти. И он доступен всем объектам класса.

Составляющие класса или объекта

В Python присутствует функция dir , которая выводит список всех методов, атрибутов и переменных класса или объекта.

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

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

  • Автор записи

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

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

Python __init __ () Функциональный синтаксис

Синтаксис функции __init __ ():

  • Ключевое слово def используется для определения его, потому что это Функция Отказ
  • Первый аргумент относится к текущему объекту. Это связывает экземпляр к методу init (). Обычно названо «я», чтобы следовать в Конвенции именования. Вы можете прочитать больше об этом на Python самоуправление Отказ
  • Аргументы метода INIT () являются необязательными. Мы можем определить конструктор с любым количеством аргументов.

Примеры конструктора класса Python

Давайте посмотрим на некоторые примеры функции конструктора в разных сценариях.

1. класс без конструктора

Мы можем создать класс без определения конструктора. В этом случае конструктор SuperClass вызывается для инициализации экземпляра класса. объект Класс – это основа всех классов в Python.

Вот еще один пример, чтобы подтвердить, что конструктор SuperClass вызывается для инициализации экземпляра подкласса.

2. Простой конструктор без аргументов

Мы можем создать конструктор без каких-либо аргументов. Это полезно для целей регистрации, таких как сохранение подсчета экземпляров класса.

3. Конструктор класса с аргументами

Большую часть времени вы найдете функцию конструктора с некоторыми аргументами. Эти аргументы обычно используются для инициализации переменных экземпляров.

4. Класс конструктор с наследством

  • Наша обязанность называть конструктор SuperClass.
  • Мы можем использовать функцию Super () для вызова функции конструктора SuperClass.
  • Мы также можем использовать имя SuperClass, чтобы вызвать его метод init ().

5. Конструктор цепи с многоуровневым наследством

6. Конструктор с несколькими наследованием

Мы не можем использовать Super () для доступа к всем суперклассам в случае нескольких наследований. Лучшим подходом было бы позвонить конструктору функции суперкласс, используя имя своего класса.

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

Python не поддерживает несколько конструкторов, в отличие от других популярных объектно-ориентированных языков программирования, таких как Java.

Мы можем определить несколько методов __init __ (), но последний переопределят более ранние определения.

Может ли Python __init __ () Функция что-нибудь вернуть?

Если мы попытаемся вернуть значение без значения из функции __init __ (), она будет поднять JypeError.

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

Создание конструкторов

дим для инициализации объекта. Такой метод называется конструктором (метод-конструктор). Обратите внимание на двойное нижнее подчеркивание слева и справа от ключевого слова init.

Его синтаксис следующий:

def_init_(self, значение 1, . значение1Ч):

значение 1, .. .значение1Ч — необязательные параметры.

В листинге 153 мы определим метод_init_так, чтобы он принимал пара

метр паше (наряду с обычным self). Далее мы создаем новое поле с именем паше. Обратите внимание, что это две разные переменные, даже несмотря на то, что они обе названы паше. Это не проблема, так как точка в выражении self.name обозначает, что существует нечто с именем паше, являющееся частью объекта self, и другое паше — локальная переменная. Поскольку мы в явном виде указываем, к какому имени обращаемся, путаницы не возникнет. Оператором stl=Student(«Ceprefi») создаем новый объект класса Student, у которого атрибут паше равен строке «Сергей».

def init (self, name):_

ргіпі(«3дравствуйте, я — студент», self.name)

Результат работы программы представлен на рис. 157.

jg Python 3.5.1 Shell

File Edit Shell Debug Options Window Help

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38 :48) [MSC v.1900 32 bit (Intel)] on Win32 Type «copyright”, «credits” or «license()» for more i nformation.

RESTART: C:/Users/Cepreid/AppData/Local/Programs/Pyth on/Python35-32/My_Froject/Классы/Класс студент.py Здравствуйте, я — студент Сергей »>

Результат работы программы

Рис. 157. Результат работы программы

Важно отметить, что при создании нового экземпляра класса мы не вызываем

метод_init_явным образом, а передаем аргументы в скобках после имени

этого класса. В этом и заключается специальная роль данного метода. После этого имеется возможность использовать поле self.name в наших методах, что и продемонстрировано в методе message(). Метод-конструктор_init_будет ав

томатически вызываться при возникновении очередного объекта класса Student, что и продемонстрировано в нижеследующем примере (листинг 154). Оператором st2=Student(«MaKc») создается второй экземпляр класса Student, а метод message() выводит на экран имя второго студента.

self.name — name def message(self):

ргЫС’Здравствуйте, я — студент», self.name) stl =Student(«Ceprefi») st2=Student(«MaKc») stl.message()

Предположим, мы хотим осуществить подсчет созданных нами студентов. Для этого мы создадим переменную класса Student, назвав ее п (листинг 155). В терминах ООП она будет называться атрибутом класса.

class Student: n=0

self.name = name Student.n +=1 def message(self):

рпп^»3дравствуйте, я — студент», self.name) def kol():

print(‘Y нас студента.’.format(Student.n)) kol=staticmethod(kol) st 1 =Student(‘Cepreft’) st2=Student(‘MaKc’) st3=Student(‘PocTHcnaB’) stl .message() st2.message() st3.message()

Результат работы программы представлен на рис. 158.

[_!& Python 3.5.1 Shell

File Edit Shell Debug Options Window Help

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01: Л 38:4S) [MSC v.1900 32 bit (Intel)] on Win32 Type «copyright», «credits» or «license()» for more information.

RESTART: C:UsersCepreiiAppDataLocalProgramsPy thonPython35-32My_ProjectKnacc Студент.py Здравствуйте, я — студент Сергей

Здравствуйте, я — студент Макс

Здравствуйте, я — студент Ростислав

У нас 3 студента.

Рис. 158. Результат работы программы

В методе-конструкторе значение атрибута класса увеличивается на единицу оператором Student.n+=1. Переменная name принадлежит объекту (ей присваивается значение при помощи self), и поэтому является переменной объекта. Значение атрибута увеличивается на единицу всякий раз, когда создается новый объект. Таким образом, мы обращаемся к переменной класса Student как Student.n, а не self.n.

Метод kol() принадлежит классу, а не объекту. В списке параметров отсутствует параметр self, потому что метод kol() будет применяться к классу, а не к объекту. Таким образом, методу не нужно передавать ссылку на объект, и пара-

метр для сохранения такой ссылки не нужен. Такой способ определения метода называется статическим и определяется как staticmethod.

Другим способом объявления статического метода в Python является использование так называемых декораторов (декорация — придание чему-либо красивого вида). В этом случае используется команда @staticmethod, размещаемая в программе перед методом. С учетом вышесказанного предыдущая программа будет написана так, как это показано в листинге 156.

class Student: n=0

self.name = name Student.n +=1 def message(self):

ргЫС’Здравствуйте, я — студент», self.name)

@staticmethod Щекоратор def kol():

print(‘y нас студента.’.format(Student.n)) stl=Student(‘Cepreft’) st2=Student(‘MaKc’) st3=Student(‘PocTHcnaB’) stl.message() st2.message() st3.message()

Декораторы можно считать упрощенным способом вызова явного оператора, который использовался в предыдущем коде.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *