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)
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 aNativeField(a field with no hook on set), for example obtained withfield(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.See smarie/python-pyfields#19 (comment)