| from typing import Any, List |
| |
| import attr |
| |
| |
| # Typing via "type" Argument --- |
| |
| |
| @attr.s |
| class C: |
| a = attr.ib(type=int) |
| |
| |
| c = C(1) |
| C(a=1) |
| |
| |
| @attr.s |
| class D: |
| x = attr.ib(type=List[int]) |
| |
| |
| @attr.s |
| class E: |
| y = attr.ib(type="List[int]") |
| |
| |
| @attr.s |
| class F: |
| z = attr.ib(type=Any) |
| |
| |
| # Typing via Annotations --- |
| |
| |
| @attr.s |
| class CC: |
| a: int = attr.ib() |
| |
| |
| cc = CC(1) |
| CC(a=1) |
| |
| |
| @attr.s |
| class DD: |
| x: List[int] = attr.ib() |
| |
| |
| @attr.s |
| class EE: |
| y: "List[int]" = attr.ib() |
| |
| |
| @attr.s |
| class FF: |
| z: Any = attr.ib() |
| |
| |
| # Inheritance -- |
| |
| |
| @attr.s |
| class GG(DD): |
| y: str = attr.ib() |
| |
| |
| GG(x=[1], y="foo") |
| |
| |
| @attr.s |
| class HH(DD, EE): |
| z: float = attr.ib() |
| |
| |
| HH(x=[1], y=[], z=1.1) |
| |
| |
| # same class |
| c == cc |
| |
| |
| # Exceptions |
| @attr.s(auto_exc=True) |
| class Error(Exception): |
| x = attr.ib() |
| |
| |
| try: |
| raise Error(1) |
| except Error as e: |
| e.x |
| e.args |
| str(e) |
| |
| |
| # Converters |
| # XXX: Currently converters can only be functions so none of this works |
| # although the stubs should be correct. |
| |
| # @attr.s |
| # class ConvCOptional: |
| # x: Optional[int] = attr.ib(converter=attr.converters.optional(int)) |
| |
| |
| # ConvCOptional(1) |
| # ConvCOptional(None) |
| |
| |
| # @attr.s |
| # class ConvCDefaultIfNone: |
| # x: int = attr.ib(converter=attr.converters.default_if_none(42)) |
| |
| |
| # ConvCDefaultIfNone(1) |
| # ConvCDefaultIfNone(None) |