63 lines
820 B
Python
63 lines
820 B
Python
# SPDX-License-Identifier: MIT
|
|
|
|
import attr
|
|
import attrs
|
|
|
|
|
|
@attr.define()
|
|
class Define:
|
|
a: str
|
|
b: int
|
|
|
|
|
|
reveal_type(Define.__init__) # noqa: F821
|
|
|
|
|
|
@attr.define()
|
|
class DefineConverter:
|
|
with_converter: int = attr.field(converter=int)
|
|
|
|
|
|
reveal_type(DefineConverter.__init__) # noqa: F821
|
|
|
|
DefineConverter(with_converter=b"42")
|
|
|
|
|
|
@attr.frozen()
|
|
class Frozen:
|
|
a: str
|
|
|
|
|
|
d = Frozen("a")
|
|
d.a = "new"
|
|
|
|
reveal_type(d.a) # noqa: F821
|
|
|
|
|
|
@attr.define(frozen=True)
|
|
class FrozenDefine:
|
|
a: str
|
|
|
|
|
|
d2 = FrozenDefine("a")
|
|
d2.a = "new"
|
|
|
|
reveal_type(d2.a) # noqa: F821
|
|
|
|
|
|
# Field-aliasing works
|
|
@attrs.define
|
|
class AliasedField:
|
|
_a: int = attrs.field(alias="_a")
|
|
|
|
|
|
af = AliasedField(42)
|
|
|
|
reveal_type(af.__init__) # noqa: F821
|
|
|
|
|
|
# unsafe_hash is accepted
|
|
@attrs.define(unsafe_hash=True)
|
|
class Hashable:
|
|
pass
|