Методы экземпляра, класса и статические методы в Python — просто о сложном
В Python у нас есть три типа методов: экземпляра (instance methods), классовые (class methods) и статические (static methods). Все они определяются внутри класса, но различаются по тому, как они работают и как к ним обращаться.
🧩 Методы экземпляра
Это наиболее распространённый тип. Они автоматически получают первым аргументом ссылку на объект (
Вызывается через экземпляр:
🧱 Классовые методы
Получают в качестве первого аргумента сам класс (
Вызывается через класс или экземпляр:
Часто используется как альтернативный конструктор:
🧊 Статические методы
Не получают ни
Вызывается так же:
🤔 Когда использовать какой метод?
- Используйте методы экземпляра, если нужно работать с данными конкретного объекта.
- Используйте классовые методы, если работаете с самим классом (например, создаёте объекты по альтернативной логике).
- Используйте статические методы, если метод связан с классом логически, но не требует доступа ни к данным экземпляра, ни к атрибутам класса.
https://realpython.com/instance-class-and-static-methods-demystified/
#python
👉 @python_real
В Python у нас есть три типа методов: экземпляра (instance methods), классовые (class methods) и статические (static methods). Все они определяются внутри класса, но различаются по тому, как они работают и как к ним обращаться.
🧩 Методы экземпляра
Это наиболее распространённый тип. Они автоматически получают первым аргументом ссылку на объект (
self
), через который можно обращаться к атрибутам и другим методам этого объекта.
class MyClass:
def instance_method(self):
print(f'Вызван instance_method: {self}')
Вызывается через экземпляр:
obj = MyClass()
obj.instance_method()
🧱 Классовые методы
Получают в качестве первого аргумента сам класс (
cls
). Это позволяет работать с атрибутами класса, а не отдельного объекта.
class MyClass:
@classmethod
def class_method(cls):
print(f'Вызван class_method: {cls}')
Вызывается через класс или экземпляр:
MyClass.class_method()
obj.class_method()
Часто используется как альтернативный конструктор:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
@classmethod
def from_string(cls, book_str):
title, author = book_str.split(' - ')
return cls(title, author)
🧊 Статические методы
Не получают ни
self
, ни cls
. Это просто функции, определённые в теле класса для логической организации, когда они имеют отношение к классу, но не используют его состояние.
class MyClass:
@staticmethod
def static_method():
print('Вызван static_method')
Вызывается так же:
MyClass.static_method()
obj.static_method()
🤔 Когда использовать какой метод?
- Используйте методы экземпляра, если нужно работать с данными конкретного объекта.
- Используйте классовые методы, если работаете с самим классом (например, создаёте объекты по альтернативной логике).
- Используйте статические методы, если метод связан с классом логически, но не требует доступа ни к данным экземпляра, ни к атрибутам класса.
https://realpython.com/instance-class-and-static-methods-demystified/
#python
👉 @python_real
👍3
Представляем DuckDB
Если вы работаете с анализом данных в Python, скорее всего, вы используете такие библиотеки, как Pandas, NumPy и SQL. Но если ваши наборы данных становятся слишком большими для оперативной памяти или вы хотите более эффективную обработку, стоит обратить внимание на DuckDB — встроенную колонко-ориентированную СУБД, идеально подходящую для аналитических задач.
DuckDB позволяет запускать SQL-запросы прямо в Python, работать с DataFrame, Parquet, CSV и другими источниками данных без необходимости в отдельном сервере БД. Он прост в установке, кроссплатформенный и совместим с Pandas.
Основные фишки DuckDB:
- SQL-интерфейс, работающий с Pandas DataFrame, Arrow, Parquet и др.
- Высокая производительность благодаря колонко-ориентированному движку.
- Поддержка сложных SQL-запросов, включая оконные функции и CTE.
- Отсутствие необходимости в сервере — всё работает локально и быстро.
Пример использования:
Вы также можете напрямую читать файлы:
DuckDB отлично справляется с задачами типа:
- Быстрый SQL-анализ локальных файлов
- Встраивание SQL в Python без необходимости запускать Postgres/MySQL
- Обработка больших таблиц без загрузки всего в память
https://realpython.com/python-duckdb/
#python
👉 @python_real
Если вы работаете с анализом данных в Python, скорее всего, вы используете такие библиотеки, как Pandas, NumPy и SQL. Но если ваши наборы данных становятся слишком большими для оперативной памяти или вы хотите более эффективную обработку, стоит обратить внимание на DuckDB — встроенную колонко-ориентированную СУБД, идеально подходящую для аналитических задач.
DuckDB позволяет запускать SQL-запросы прямо в Python, работать с DataFrame, Parquet, CSV и другими источниками данных без необходимости в отдельном сервере БД. Он прост в установке, кроссплатформенный и совместим с Pandas.
Основные фишки DuckDB:
- SQL-интерфейс, работающий с Pandas DataFrame, Arrow, Parquet и др.
- Высокая производительность благодаря колонко-ориентированному движку.
- Поддержка сложных SQL-запросов, включая оконные функции и CTE.
- Отсутствие необходимости в сервере — всё работает локально и быстро.
Пример использования:
import duckdb
import pandas as pd
df = pd.read_csv("data.csv")
result = duckdb.query("SELECT column1, AVG(column2) FROM df GROUP BY column1").to_df()
Вы также можете напрямую читать файлы:
result = duckdb.query("SELECT * FROM 'data.parquet' WHERE value > 100").to_df()
DuckDB отлично справляется с задачами типа:
- Быстрый SQL-анализ локальных файлов
- Встраивание SQL в Python без необходимости запускать Postgres/MySQL
- Обработка больших таблиц без загрузки всего в память
https://realpython.com/python-duckdb/
#python
👉 @python_real
👍6