| # 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 |