Работа с классами
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