Работа с классами

Getters / setters

class Student:
    def __init__(self):
        self._score = 0

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self, s):
        if 0 <= s <= 100:
            self._score = s
        else:
            raise ValueError('The score must be between 0 ~ 100!')

    @score.deleter
    def score(self):
        del self._score

Yang = Student()

Yang.score=99
print(Yang.score)
# 99

Yang.score = 999
# ValueError: The score must be between 0 ~ 100!

Методы класса, методы объекта, статические методы

Используем декоратор @classmethod для методов, которые должны быть только у классов, но не их экземпляров

Статические методы (объявленные как @staticmethod), могут быть вызваны как у объекта, так и у класса, но они не принимают ничего специфичного для класса (cls)

Конструкторы

Следует разделять __new__ и __init__.

__new__: создает новый экземпляр (вызывается первым)

__init__: инициализирует новый экземпляр (вызывается вторым)

Пример построения класса-синглтона:

Ограничения атрибутов у класса

Чтобы нельзя было создать большое количество атрибутов, мы можем ограничить возможные атрибуты с помощью __slots__:

Last updated