⚡ Краткий справочник
datetime.strptime(text, "%Y-%m-%d").date() — строка → дата.
date.today() — сегодняшняя дата.
class Student: current_id = 1 — атрибут класса.
@classmethod def from_string(cls, data): ... — классовый метод.
@staticmethod def filter_by_min_age(students, min_age): ... — статический метод.
def __str__(self) -> str: return "..." — строковое представление.
def __repr__(self) -> str: return "..." — отладочное представление.
Общий синтаксис класса Student
from datetime import datetime, date
class Student:
current_id: int = 1 # атрибут класса — счётчик ID
MIN_AGE: int = 16 # константа класса
def __init__(self, name: str, birth_date: str) -> None:
self.birth_date = datetime.strptime(birth_date, "%Y-%m-%d").date()
if not self.is_valid_birthdate():
raise ValueError("Student must be at least 16 years old.")
self.name = name
self.student_id = Student.current_id
Student.current_id += 1
def __str__(self) -> str:
return f"Student: {self.name}, birth_date: {self.birth_date}, ID: {self.student_id}"
def __repr__(self) -> str:
return (
f"Student(name={self.name!r}, birth_date={self.birth_date!r}, "
f"student_id={self.student_id!r})"
)
def show_info(self) -> None:
print(f"Student:\n\tName: {self.name}\n\tAge: {self.calculate_age()}\n\tID: {self.student_id}")
def calculate_age(self) -> int:
today = date.today()
return self.calculate_age_on(today)
def calculate_age_on(self, target_date: date) -> int:
age = target_date.year - self.birth_date.year
if (target_date.month, target_date.day) < (self.birth_date.month, self.birth_date.day):
age -= 1
return age
def is_valid_birthdate(self) -> bool:
return self.calculate_age() >= self.MIN_AGE
@classmethod
def from_string(cls, data: str) -> "Student":
name, date_string = map(str.strip, data.split(","))
return cls(name, date_string)
@staticmethod
def filter_by_min_age(students: list["Student"], min_age: int) -> list["Student"]:
return [s for s in students if s.calculate_age() >= min_age]
Сравнение типов методов
| Тип метода |
Декоратор |
Первый аргумент |
Доступ |
Когда использовать |
| Обычный метод |
— |
self |
К полям и методам объекта |
Когда метод работает с конкретным экземпляром |
| Классовый метод |
@classmethod |
cls |
К полям и методам класса |
Для альтернативных конструкторов и работы с классом |
| Статический метод |
@staticmethod |
— |
— |
Когда функция логически относится к классу, но не использует self и cls |
Операции с datetime
| Запись | Результат | Пример |
datetime.strptime(s, "%Y-%m-%d").date() | Объект date из строки | date(2005, 5, 10) |
date.today() | Сегодняшняя дата | date(2026, 6, 16) |
date.fromisoformat(s) | Объект date из строки ISO | date(2005, 5, 10) |
d1.year, d1.month, d1.day | Компоненты даты | 2005, 5, 10 |
Магические методы
| Метод | Когда вызывается | Что должен делать |
__init__(self, ...) | При создании объекта | Инициализировать атрибуты |
__str__(self) | print(obj), str(obj) | Вернуть читаемую строку |
__repr__(self) | repr(obj), вывод в коллекциях | Вернуть техническое представление |
Параметры и аннотации
| Параметр | Тип | Описание |
self | экземпляр класса | Ссылка на текущий объект |
cls | класс | Ссылка на класс в @classmethod |
-> int | аннотация | Подсказка о типе возвращаемого значения |
Проверить по документации: аннотации типов в таблице выходят за рамки исходного материала. Подробнее см.
typing.
Проверить по документации: встроенные функции
classmethod,
staticmethod и модуль
datetime описаны в
Built-in Functions и
datetime.