**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)
```