🔖 Справочник команд и синтаксиса

⚡ Краткий справочник

  • 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 из строки ISOdate(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.