#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
​​📌ДИНАМИЧЕСКИЕ АТТРИБУТЫ ДЛЯ ОБЪЕКТОВ

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

Когда мы вызваем что-то вроде <myobject>.<myattribute>,Python будет искать <myattribute> в библиотеке объекта, вызвав __getattribute__
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод __getattr__ вызывается , получая имя аттрибута (myattribute) как параметр.
Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".

Ниже показано определение метода __getattr__ .

class DynamicAttributes:
def __init__(self, attribute):
self.attribute = attribute
def __getattr__(self, attr):
if attr.startswith("fallback_"):
name = attr.replace("fallback_", "")
return f"[fallback resolved] {name}"
raise AttributeError(f"{self.__class__.__name__} has no attribute {attr}")

Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.
​​ 📌ГЕТТЕРЫ И СЕТТЕРЫ В python
(Инкапсуляция)
В ЯП python по умолчанию все атрибуты в классах являются общедоступными(public), это значит , что из любого места программы мы можем получить аттрибут объекта и изменть его.
🎯Пример:
class Human:
def __init__(self, name, age): #коструктор класса Human
self.name = name #устанавливаем имя
self.age = age #устанавливаем возраст
def display_info(self):
print ("Имя : ", self.name, "\tВозраст:", self.age)
Me = Human ("python_lounge", 2)
Me.name = "Captain-America!" # изменяем атрибут name
Me.age = 132 # изменяем атрибут age
Me.display_info()
Результат:
Output : "Имя: Человек-паук    Возраст: -129"
В примере выше мы показали что без икапсуляции можно нежелательным образом изменять аттрибуты класса.
Не зря инкапсуляция является несущим звеном в мире ООП.
⚠️
На вопрос что такое инкапсуляция в программировании нужно ответить следующим образом.
Инкапсуляция предотвращает прямой доступ к атрибутам объект из вызывающего кода.
Касательно инкапсуляции непосредственно в языке программирования Python, скрыть атрибуты класса можно сделав их приватными или закрытыми и ограничив доступ к ним через специальные методы, которые еще называются свойствами.
Изменим выше определенный класс, определив в нем свойства:

class Human:
   def __init__(self, name, age): #коструктор класса Human
    self.__name = name #устанавливаем имя
    self.__age = age #устанавливаем возраст

   def set_age(self, age):
    if (age in range(1,100)):
       self.__age = age #
    else :
       print ("Недопустимый возраст")

   def set_name (self, name):
      self.__name = name if name else print ("Недопустимое имя")

   def display_info(self):
      print ("Имя : ", self.__name, "\tВозраст:", self.__age)

   def get_age(self):
      return self.__age

   def get_name(self):
      return self.__name

Me = Human ("python_lounge", 2)
Me.display_info() #Имя:python_lounge Возраст: 2
Me.set_name ("Captain-America!") #изменяем атрибут name
Me.set_age(26) # изменяем атрибут age
Me.display_info() #Имя:Captain-America! Возраст: 26


Для создания приватного атрибута в начале его наименования ставится двойной прочерк: self.__name. К такому атрибуту мы сможем обратиться только из того же класса. Но не сможем обратиться вне этого класса. Например, присвоение значения этому атрибуту ничего не даст:
Me.__age = 43

👉Аннотации свойств
Выше мы рассмотрели, как создавать свойства. Но Python имеет также еще один - более элегантный способ определения свойств. Этот способ предполагает использование аннотаций, которые предваряются символом @.
Для создания свойства-геттера над свойством ставится аннотация @property.
Для создания свойства-сеттера над свойством устанавливается аннотация имя_свойства_геттера.setter.
Что, если mypy может предупредить вас о возможных проблемах во время компиляции?

https://proglib.io/w/278c806e
Стартует 6 раунд баттла ЯП: сегодня за вашу любовь соревнуются SQL с JS и Python C#

Вчера победу одержали Swift и C++. С чем и поздравляем любителей этих языков. А мы двигаемся дальше.

Сегодня мы выберем самый любимый язык между SQL и JS, Python и C#. Напоминаем, что выбираем максимально субъективно. Так что смело голосуйте за тот язык, что больше нравится вам:

https://tprg.ru/W5KX

Голосование закончится 20 декабря в 11:00 по московскому времени. Следить за всеми постами чемпионата можно по тегу #toplang2020 или в боте: https://t.me/tproger_official_bot/?start=toplang2020
Forwarded from Zen of Python
Pylint: о попытке снизить потребление памяти

Желая выяснить, что потребляет большое количество памяти при проверке кода с помощью Pylint и как с этим бороться, автор провёл своё мини-расследование.

Эта статья — разбор кода стандартной библиотеки, который поможет лучше понять принципы его работы для более качественного её использования, а также избежать проблем, с которыми столкнулся автор:

https://tprg.ru/LHZI

#библиотека #pylint
Forwarded from Zen of Python
Pip: как устанавливать пакеты в Python

Существует большое количество различных менеджеров пакетов. Их использование позволяет упростить и ускорить создание проекта за счёт быстрого поиска и установки.

В этой статье вы узнаете, как работать с пакетами, используя менеджер Pip:

https://tprg.ru/psiz
Как правильно ничего не делать в Python: инструкция pass

Говорят, что в Python нет ничего проще ключевого слова pass – всего лишь инструкция «ничего не делать», чтобы соблюсти синтаксис языка. Однако не всегда pass служит заглушкой – есть и более интересные применения.

https://proglib.io/sh/64oStjVNXh
Real-World Python: A Hacker's Guide to Solving Problems with Code (2020)
Автор: Lee Vaughan
Количество страниц: 360

Если вы освоили основы и готовы изучить некоторые из более мощных инструментов, доступных на Python, данная книга покажет вам, как это сделать. В рамках серии практических проектов вы исследуете и решите реальные задачи с помощью сложных инструментов компьютерного зрения, машинного обучения, анализа данных и языковой обработки. Вы познакомитесь с важными модулями, такими как OpenCV, NumPy, Pandas, NLTK, Bokeh, Beautiful Soup, Requests, HoloViews, Tkinter, turtle, matplotlib и другими.

Скачать книгу
Forwarded from Zen of Python
Что работодатели ждут от Junior Python-разработчика

Автор нашей статьи, имея за плечами соответствующий опыт и знания, делится ими с нашими читателями.

В статье вы узнаете, как успешно пройти собеседование и не ударить в грязь лицом, какие навыки нужны, что повторить перед собеседованием и многое другое:

https://tprg.ru/WP42
Forwarded from Zen of Python
«За меня учится Python бот»

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

Если хотите также, то читайте статью, где автор подробно показывает и рассказывает, как он это сделал:

https://tprg.ru/Xdc5
Forwarded from Zen of Python
Особенности Python при разработке мобильного приложения

На сегодняшний день Python проник практически во все направления разработки. Не обошёл стороной он и мобильные приложения.

В этой статье вы узнаете о двух наиболее популярных фреймворках для мобильной разработки — Kivy и BeeWare, а также о том, какие преимущества есть у Python при разработке приложений:

https://tprg.ru/8xoD
Forwarded from Zen of Python
Так и премию Дарвина за глупую смерть получить недолго
Forwarded from Евгений Ив
https://pypi.org/project/keyring/ - единственно нормальный способ. Переменные ENV тоже в топку
Forwarded from Python Academy
Запрос пароля у пользователя 

Множеству инструментов командной строки или скриптов для работы требуется имя пользователя и пароль. Если вам придётся писать подобную программу – вы, возможно, сочтёте полезным модуль getpass.

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

#трюки #модули
Python test - канал, на котором выкладывают задачки по Python разного уровня и решение на них.

Грех не подписаться на такой полезный канал 👉🏻 @python_tesst