Skip to content

Recursive Attrs class generation #299

Closed
@kyteware

Description

@kyteware
  • cattrs version: 22.1.0
  • Python version: 3.11.0-rc1
  • Operating System: Fedora Linux

Description

I would like an easy way to recursively generate attrs classes that have attributes of their type (eg Foo.foo: Foo). Obviously, you can't directly annotate attributes as being of the same type of the class, as the class is not yet generated when specifying attrs attributes. However, Python 3.11 introduces typing.Self, a shortcut to annotating the class. Cattrs could implement this, allowing users to avoid using __attrs_post_init__ to achieve this.

What I Did

# I would like to be able to do this:
@define
class Bar:
    baz: typing.Self = None

@define
class Foo:
    bar: Bar

structure({"bar": {"baz": {"baz": None}}}, Foo)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      close