4
from __future__ import print_function
9
@cython.dataclasses.dataclass(order=True, unsafe_hash=True)
12
>>> sorted(list(MyDataclass.__dataclass_fields__.keys()))
14
>>> inst1 = MyDataclass(2, ['a', 'b'])
16
MyDataclass(a=2, self=['a', 'b'])
17
>>> inst2 = MyDataclass()
19
MyDataclass(a=1, self=[])
24
>>> inst2 == MyDataclass()
26
>>> hash(inst1) != id(inst1)
28
>>> inst1.func_with_annotations(2.0)
33
self: list = cython.dataclasses.field(default_factory=list, hash=False)
35
def func_with_annotations(self, b: float):
45
@cython.dataclasses.dataclass
50
NoInitFields(has_default=DummyObj(), has_factory='From a lambda', neither=None)
51
>>> NoInitFields().has_default is NoInitFields().has_default
54
>>> NoInitFields(1) # doctest: +IGNORE_EXCEPTION_DETAIL
55
Traceback (most recent call last):
56
TypeError: NoInitFields.__init__() takes 1 positional argument but 2 were given
58
>>> NoInitFields(has_default=1) # doctest: +ELLIPSIS
59
Traceback (most recent call last):
60
TypeError: ...has_default...
61
>>> NoInitFields(has_factory=1) # doctest: +ELLIPSIS
62
Traceback (most recent call last):
63
TypeError: ...has_factory...
64
>>> NoInitFields(neither=1) # doctest: +ELLIPSIS
65
Traceback (most recent call last):
66
TypeError: ...neither...
68
has_default : object = cython.dataclasses.field(default=DummyObj(), init=False)
69
has_factory : object = cython.dataclasses.field(default_factory=lambda: "From a lambda", init=False)
71
neither : object = cython.dataclasses.field(init=False)
73
def __post_init__(self):
74
if not cython.compiled:
77
assert not hasattr(self, "neither")
81
@cython.dataclasses.dataclass
82
class NonInitDefaultArgument:
84
>>> NonInitDefaultArgument(1.0, "hello")
85
NonInitDefaultArgument(x=1.0, y=10, z='hello')
88
y: int = cython.dataclasses.field(default=10, init=False)