**UPD. Не актульно, есть стандартный модуль dataclasses https://docs.python.org/3/library/dataclasses.html** Упрощает программирование на Python в объектно-ориентированном стиле еще сильнее Установка ``` python -m pip install attrs ``` ``` from attr import attrs, attrib @attrs class Person: name = attrib() age = attrib() skills = attrib(init=False) p1 = Person('Chris', 32) p2 = Person('Chris', 32) ``` ### Значения по умолчанию Что делать, если мы хотим установить атрибут с пустой коллекцией в качестве значения по умолчанию? ``` @attrs class Person: name = attrib(default='Chris') age = attrib(default=32) skills = attrib(factory=list) ``` ### Проверка атрибутов ``` @attrs class Student: name = attrib() age = attrib() student_id = attrib() @student_id.validator def check_student_id(self, attribute, value): if len(str(value)) != 6: raise ValueError(f'student_id must be 6 characters! got {len(str(value))}') ``` ### Подклассы В простом Python мы должны использовать функцию super() в функции __init__() для реализации наследования. Это будет очень сложно, если нужно осуществить мульти-наследование. attrs делает этот процесс чрезвычайно легким. ``` @attrs class Person: name = attrib() age = attrib() def get_name(self): return self.name @attrs class User: user_id = attrib() def get_user_id(self): return self.user_id @attrs class Student(Person, User): student_id = attrib() def get_student_id(self): return self.student_id student = Student(name='Chris', age=32, user_id='ctao', student_id=123456) ``` ### Сериализация в словарь ``` attr.asdict(student) ```