Skip to content

Ability to override __slots__ with custom descriptors, especially non-data #5

@smarie

Description

@smarie

It is currently not possible for a class to define an attribute in the __slots__ (therefore generating a descriptor behind the scenes) and then to define a descriptor on that class with the same name.

However that would be desirable in certain cases. For example in the case of pyfields : in case of a NativeField (a field with no hook on set), for example obtained with field(default=1), that descriptor is implemented with a non-data descriptor overriding itself with the default value on first get, or replaced by user-provided value on first set. It could therefore easily fallback to the slot descriptor after first get or set.

from pyfields import field

class A:
    # __slots__ = ('a', )   <-- this does not work
    a = field(default=1)
# set first
o = A()
o.a = 2
# get first
o = A()
print(o.a)

See smarie/python-pyfields#19 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions