ООП в Python: понимание частных и общедоступных методов

ООП в Python: понимание частных и общедоступных методов

3 апреля 2022 г.

Понимание различных типов методов и способов их использования в этом классе Python


Метод — это функция, встроенная в класс.


Метод должен иметь хотя бы один параметр. Нет такой вещи, как метод без параметров. Обычно self используется как параметр в методах, которым не нужны никакие настраиваемые параметры. self относится к объекту, для которого вызывается метод, и делает объект переменные и методы доступными для метода. Использование слова «я» является нормой, которой обычно следуют. Таким образом, несмотря на то, что «я» можно заменить любым другим словом, это добавит ненужных сюрпризов.


Случай


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


Так как основные требования все те же:


  • Это список,

  • Он должен иметь возможность добавлять и удалять элементы,

  • И он должен показать весь список.

Мы будем повторно использовать класс NumList, который мы создали ранее, и основываться на нем, используя подкласс под названием StrictNumList. Внутри StrictNumList мы видим, что определены два метода: __check_value() и add_value(). Подробнее об этом будет сообщено позже.


```питон


девушка NumList:


def init(я, имя = ""):


self.instName = имя


сам.__список = []


определение add_value (я, значение):


self.__list.append(val)


определение удалить_значение (я):


rv = self.__list[-1]


удалить себя.__список[-1]


вернуть автофургон


защита get_list (я):


вернуть себя.__список


класс StrictNumList(NumList):


def init(я, имя):


super().init(имя)


def __check_value (я, значение):


вернуть ул(val).isalpha()


определение add_value (я, значение):


если не self.__check_value(val):


super().add_value(val)


еще:


input_val = input("Вставьте число:")


значение = число с плавающей запятой (вход_значение)


super().add_value(val)


```питон


sl01 = StrictNumList(name = "Список номеров B1")


sl01.instName


sl01.add_value(2)


sl01.add_value("abc")


Вставьте число: 5


```питон


sl01.get_list()


```javascript


[2, 5.0]


Конструктор — специальный метод


__init__ или конструктор Python — это особый вид метода, который используется для инициации класса.


  • Он запускается каждый раз при создании экземпляра класса и делает этот класс пригодным для использования.

  • Должен иметь хотя бы один параметр - self, чтобы сделать свойства объекта доступными.

  • В отличие от других методов, __init__ не может возвращать значение или не может быть вызван внутри или вне класса. Например, вы не можете создать вызов метода типа <имя объекта><.>__init__().

2 типа методов


Подобно переменным, методы могут быть общедоступными или приватными, или лучше называться частично приватными (помните искажение имен?).


1. Приватные методы


  • Присвоение имени приватному методу осуществляется по тому же образцу, что и приватным переменным — перед именем метода добавляются два символа подчеркивания (__).

  • Изменение имени работает с именем класса так же, как и с переменными.

Зачем использовать закрытый метод?


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


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


В нашем примере класса StrictNumList мы создали __check_value() как закрытый метод. Потому что его основная цель — использовать внутри метода add_value(). Но посмотрите на приведенный ниже код, чтобы увидеть, как мы все еще можем получить доступ к этому методу, используя искаженное имя!


```питон


вызов приватного метода - __check_value(), используя его искаженное имя


sl01._StrictNumList__check_value('5.5')


Ложь


2. Публичные методы


Публичные методы могут быть доступны непосредственно из объекта с использованием записи через точку, т.е. <имя объекта><.><имя метода>. В нашем примере add_value() является общедоступной переменной.


🛑 Но обратите внимание, как мы определили этот метод как в супер, так и в подклассе. Это называется переопределением метода.


Переопределение метода происходит, когда вы по-разному определяете один и тот же метод в подклассе.


Чтобы успешно использовать переопределение метода, вам необходимо выполнить два условия:


  • Это возможно только в контексте наследования class. Или, другими словами, наследование метода не работает внутри одного и того же класса.

  • Подкласс должен иметь то же имя и количество параметров, что и суперкласс.

🛑 Также обратите внимание, как метод add_value() из суперкласса использовался в методе add_value() в подклассе SuperNumList.


Что дальше


До сих пор в этой серии ООП в Python:


  • Мы представили классы и их основные строительные блоки,

  • Мы узнали о наследовании и его применении с помощью подкласса,

  • Мы подробно описали переменные и, в этом посте, методы.

В следующем посте мы постараемся получить представление об исключениях Python изнутри. И при этом мы увидим, как изучение этих тем пригодится! Удачного кодирования!



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE