1""" 2Tests for `__init_subclass__` related tests. 3 4Python 3.6+ only. 5""" 6 7import pytest 8 9import attr 10 11 12@pytest.mark.parametrize("slots", [True, False]) 13def test_init_subclass_vanilla(slots): 14 """ 15 `super().__init_subclass__` can be used if the subclass is not an attrs 16 class both with dict and slots classes. 17 """ 18 @attr.s(slots=slots) 19 class Base: 20 def __init_subclass__(cls, param, **kw): 21 super().__init_subclass__(**kw) 22 cls.param = param 23 24 class Vanilla(Base, param="foo"): 25 pass 26 27 assert "foo" == Vanilla().param 28 29 30def test_init_subclass_attrs(): 31 """ 32 `__init_subclass__` works with attrs classes as long as slots=False. 33 """ 34 @attr.s(slots=False) 35 class Base: 36 def __init_subclass__(cls, param, **kw): 37 super().__init_subclass__(**kw) 38 cls.param = param 39 40 @attr.s 41 class Attrs(Base, param="foo"): 42 pass 43 44 assert "foo" == Attrs().param 45