🐍 Укус питона 🐍
2.6K subscribers
980 photos
18 videos
284 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
🏗 Как работает call в Python?

Метод call позволяет вызывать экземпляр класса как функцию. Если этот метод определён в классе, объект можно использовать как obj().

Пример:

class Multiplier:
def init(self, factor):
self.factor = factor

def call(self, value):
return value * self.factor

double = Multiplier(2)
print(double(5)) # 10


🔹 Зачем нужно?

• Позволяет создавать объекты-функции.
• Удобно для конфигурируемых вычислений (например, замыканий).
• Улучшает читаемость, убирая лишние .method() вызовы.

⚡️ Используйте call, если хотите, чтобы объект вёл себя как функция!
⚡️ Как работает @staticmethod в Python?

Декоратор @staticmethod превращает метод класса в обычную функцию внутри класса, которая не получает ссылку на экземпляр (self) или класс (cls).

Пример:

class MathUtils:
@staticmethod
def add(x, y):
return x + y

print(MathUtils.add(3, 5)) # 8


🔹 Зачем нужен?

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

⚡️ Используйте @staticmethod, если метод не работает с self или cls, но логически относится к классу!
🏷 Что такое functools.lru_cache и зачем он нужен?

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

Пример:

from functools import lru_cache

@lru_cache(maxsize=100) # Кэшируем до 100 результатов
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

print(fib(10)) # 55 (значительно быстрее благодаря кэшу)


🔹 Зачем использовать?


• Ускоряет повторяющиеся вычисления.
• Уменьшает нагрузку на процессор при рекурсивных вызовах.
• Экономит память благодаря ограничению maxsize.

⚡️ lru_cache особенно полезен для функций с повторяющимися входными данными!
Как работает itertools.cycle в Python?

itertools.cycle создаёт бесконечный итератор, который зацикливает последовательность, перезапуская её с начала после завершения.

Пример:

from itertools import cycle

colors = ["red", "green", "blue"]
color_cycle = cycle(colors)

for _ in range(5):
print(next(color_cycle)) # red → green → blue → red → green


🔹 Зачем использовать?

• Повторение элементов списка без переписывания вручную.
• Автоматическое зацикливание без индексов.
• Полезно в анимациях, смене тем, бесконечных процессах.

itertools.cycle — мощный инструмент для циклических операций без лишнего кода.
🔄 Как работает itertools.chain в Python?

itertools.chain позволяет объединять несколько итерируемых объектов в один, не создавая новых списков. Это экономит память и делает код чище.

Пример:

from itertools import chain

list1 = [1, 2, 3]
list2 = [4, 5, 6]

for num in chain(list1, list2):
print(num) # 1 2 3 4 5 6


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

chain
позволяет перебирать элементы последовательно, без лишних затрат, что особенно полезно при работе с большими наборами данных или генераторами.
Автоматизация тестирования desktop приложений с помощью Dogtail

В статье рассмотрим, как Dogtail заменил Appium для тестирования отечественных Linux-приложений. Разберём его работу с GTK и Qt, взаимодействие через ATK и DBus, а также опыт использования.
Что делает метод new в Python и когда его использовать?

Метод new отвечает за создание нового экземпляра класса перед его инициализацией в init. Он используется в случаях, когда нужно контролировать процесс создания объекта, например, в синглтонах или при наследовании от неизменяемых типов (int, str, tuple).

Пример использования:

class Singleton:
_instance = None

def new(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance

obj1 = Singleton()
obj2 = Singleton()

print(obj1 is obj2) # True (оба объекта — одна и та же ссылка)


В отличие от init, new контролирует сам процесс создания объекта. Полезен для ограничения числа экземпляров и работы с неизменяемыми классами.
🔍 Как работает staticmethod vs classmethod в Python?

В Python есть два специальных декоратора для методов класса: @staticmethod и @classmethod. Они позволяют работать без создания экземпляра, но имеют ключевые различия.

Пример:

class Example:
class_attr = "Hello"

@staticmethod
def static_method():
return "I'm a static method"

@classmethod
def class_method(cls):
return f"Class method: {cls.class_attr}"

print(Example.static_method()) # I'm a static method
print(Example.class_method()) # Class method: Hello


@staticmethod ведёт себя как обычная функция внутри класса, не имея доступа к атрибутам класса или экземпляра. @classmethod, наоборот, получает ссылку на класс (cls) и может изменять его атрибуты.

Используйте @staticmethod для независимых функций, а @classmethod, когда нужно работать с самим классом.
⚙️ Как работает metaclass в Python?

В Python метаклассы управляют созданием классов, так же как классы управляют созданием объектов. Они позволяют автоматизировать и настраивать процесс создания классов.

Пример:

class Meta(type):
def new(cls, name, bases, dct):
dct["custom_attr"] = 42
return super().new(cls, name, bases, dct)

class MyClass(metaclass=Meta):
pass

print(MyClass.custom_attr) # 42


Метаклассы позволяют добавлять атрибуты, проверять код, изменять поведение классов перед их созданием.

Это мощный инструмент, но его стоит использовать только при необходимости, например, в ORM, фреймворках и API.