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)