Добро пожаловать! Форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы на существующие темы, повышать репутацию участников, скачивать вложения и файлы и многое, многое другое. Так чего же вы ждете?

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

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

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываются в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки не работают на форуме

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

python Гайд Классы и хитрости в Python. Душим Python

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
27 009
230
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
Классы и хитрости в Python. Душим Python.jpg

Сегодня мы разберемся подробнее в классах, так как у многих junior программистов python возникают проблемы в них. Так же отдельно затронем интересную тему, что такое *args и **kwargs. Почему эти темы трудные? Все связано с тем, что на начальном уровне программирования нам не требуется строить громоздкие конструкции по взаимодействию с чем-либо. Обычно мы о ограничиваемся скриптами без собственных классов. Или же создаем объекты классов из библиотек и не задумываемся, а что там внутри. Сегодня мы взглянем, как можно кастомизировать под себя класс и добавить нужный нам функционал под конкретную задачу на примере взаимодействия с mongo bd.

Что потребуется
  • Компьютер или любая другая ЭВМ
  • Редактор кода
  • Python версии 3.9 и выше
  • Соединение с интернетом (можно и без него)

Установка

Установка для windows
  • pip install pymongo
Для macOS
  • pip3 install pymongo

Знакомство с классами

И что ж мы начнем разбираться. Для чего нужен класс? Он нужен для создания объектов, с определенными фикциями и данными внутри. То есть класс нам упрощает жизнь. Если у нас есть какой-либо функционал взаимодействия с чем-либо и для этого надо много функций, которые мы постоянно вызываем и передаем в них значения, то следует объединить их все (функции) в один объект.

Пример:

Взаимодействие с БД (базой данных). Нам надо в начале к ней подключится. Потом найти нужную нам таблицу. Потом сделать поиск значений по каким-то параметрам. И после этого вывести полученные значения. А у нас может быть еще и запись, и редактирование, и создание, и удаление и так далее. Через какое-то время нам надоест руками перебирать все функции для работы с БД (там может быть много этапов).

Вот тут и вступает в игру классы. Рассмотрим на примере кода:
Python:
class Person:
def __init__(self, sex: str):
 self.sex = sex
 self.gender = 'heterosexual'
 self.age = 0
 print('I was born')
 
def change_gender(self, preferred_gender: str):
 self.gender = preferred_gender
 
def describe_the_action(self, action: str):
 print('I do ', action)
 
def __del__(self):
print('I am dead')

Обратим внимание на то, что в python принято записывать имя класса с заглавной буквы. Сразу следует уточнить, что функции и переменные называются в классах по-другому. Функция – это метод, а переменное – это поле.

Метод __init__ - это конструктор, то есть вызывается при создание объекта. То есть как только мы создадим его то нам выведется ‘I was born’. Все методы принимают обязательный элемент self он указывает, что мы обращаемся именно к этому объекту, а не к какому-то другом (красочный пример

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

). У нашей персоны будет его пол, гендер (стандартный при рождение) и возраст (изначально он будет равен 0).Дальше передаем аргументы.

Теперь не много о полях. Они распознаются обращением к self и через точку название поля.

Метод __del__ - это деконструктор, который срабатывает когда объект уничтожается (вызов del object или завершение скрипта).

Так же добавим свой собственный метод, который будет выводить что делает человек и изменение гендера персоны.
Python:
person = Person('male')
Создаем объект на основе класса и передаем его пол male

Давайте теперь посмотрим, что выведется и попробуем изменить
Python:
print('gender:', person.gender)

person.change_gender('cat')

print('gender:', person.gender)
Выводы в консоль:

  1. I was born
  2. gender: heterosexual
  3. gender: cat
  4. I am dead

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

Наследование класса

Теперь мы взглянем, как наследоваться от другого класса.

Python:
class Ivan(Person):
    
    def __init__(self, sex: str, name: str):
        super().__init__(sex)
        self.name = name

Для наследования мы после названия класса пишем в скобки класс, от которого мы хотим наследоваться. Мы унаследуем все методы и поля, которые есть у родителя. Так же надо принять инициализацию класса родителя. С этим на поможет super().__init__(sex). После для Ивана мы сохраняем имя.
Python:
man = Ivan('male', 'Ivan')

print('gender:', man.gender)

man.change_gender('cat')

print('gender:', man.gender)
Теперь вы можете убедится, что все методы остались от person и будут новые от Ivan

Вывод в консоль:

  1. I was born
  2. gender: heterosexual
  3. gender: cat
  4. I am dead

Чуть не забыл, что обращаться к полям класса можно через точку. Пример:
Python:
print(man.name)

Вывод в консоль

  1. Ivan
*args и **kwargs

Что это такое и с чем это едят? Для того, чтобы объяснить потребуется пример.

*args

Тут не важно какое будет название у аргумента, главное — это оператор звёздочка, которая говорит python, что все следующие аргументы передавать в *args
Python:
def args(first, second, *other):

    print('first:', first)

    print('second:', second)

    print('other:', other)

    print(type(other))


args(1, 2, 3, 4, 5, 6, 7, 8)

Давайте, посмотрим перед объяснение, что выведется в консоль

Вывод в консоль
  1. first: 1
  2. second: 2
  3. other: (3, 4, 5, 6, 7, 8)
  4. <class 'tuple'>

Теперь мы видим что первые аргументы поступающие в функцию имеют свое название first, second, а все остальные попалили в кортеж (typle). К other обращаться по индекс и все обычными способами (подробнее о tuple

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

).

Что будет если мы не передадим в other никаких аргументов?
Python:
args(1, 2)
Вывод в консоль

  1. first: 1
  2. second: 2
  3. other: ()
  4. <class 'tuple'>
Мы получим пустой кортеж и никаких ошибок не будет.

**kwargs
Python:
def kwargs(first, second, **other):

    print('first:', first)

    print('second:', second)

    print('other:', other)

    print(type(other))

kwargs(1, 2, nums=[1, 2, 3, 3], string='text', dict={'key': 'value'})

У вам может возникнуть вопрос, что за новые аргументы nums, string и dict? Давайте, запустим и посмотрим

Вывод в консоль

  1. first: 1
  2. second: 2
  3. other: {'nums': [1, 2, 3, 3], 'string': 'text', 'dict': {'key': 'value'}}
  4. <class 'dict'>

Удивительно, но other стал словарем с ключами в виде название аргументов. Как мы видим туда можно передавать любое количество аргументов со значением и получать словарь из них.

Так же взглянем если туда не передавать значения
Python:
kwargs(1, 2)

Вывод в консоль
  1. first: 1
  2. second: 2
  3. other: {}
  4. <class 'dict'>

Как видите ошибок нет и у нас просто пустой массив.

Заключение

Темы не просты в освоение, поэтому я могу лишь надеется, что вы поймете. Так как я пытался максимально понятно объяснить, но передать то, что просто понимаешь достаточно трудно. Чтобы понять и закрепить материал для вас я рекомендую самостоятельно поиграться с классами и args, и kwargs. Желательно на каком-то проекте, чтобы применить знания в «стрессовой ситуации».
 
iwanttodie Оффлайн

iwanttodie

Участник
LV
3
 
13.09.2023
0
0
36
Награды
5
25
Пол
Муж.

Репутация:

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

Поиск по форуму

Похожие темы:

shape1
shape2
shape3
shape4
shape7
shape8
Верх