/
niceSOFT
/
python3-attrs
Обзор
Документация
Войти
/
niceSOFT
/
python3-attrs
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
tests/test_init_subclass.py
66 строк
1 KB
Hynek Schlawack
Demonstrate init subclass workaround
27 июн 2023, 08:12
Не верифицирован
27 июн 2023, 08:12
261d26e
Код
Авторство
О чём код?
# SPDX-License-Identifier: MIT """ Tests for `__init_subclass__` related functionality. """ import attr def test_init_subclass_vanilla(slots): """ `super().__init_subclass__` can be used if the subclass is not an attrs class both with dict and slotted classes. """ @attr.s(slots=slots) class Base: def __init_subclass__(cls, param, **kw): super().__init_subclass__(**kw) cls.param = param class Vanilla(Base, param="foo"): pass assert "foo" == Vanilla().param def test_init_subclass_attrs(): """ `__init_subclass__` works with attrs classes as long as slots=False. """ @attr.s(slots=False) class Base: def __init_subclass__(cls, param, **kw): super().__init_subclass__(**kw) cls.param = param @attr.s class Attrs(Base, param="foo"): pass assert "foo" == Attrs().param def test_init_subclass_slots_workaround(): """ `__init_subclass__` works with modern APIs if care is taken around classes existing twice. """ subs = {} @attr.define class Base: def __init_subclass__(cls): subs[cls.__qualname__] = cls @attr.define class Sub1(Base): x: int @attr.define class Sub2(Base): y: int assert (Sub1, Sub2) == tuple(subs.values())