Но все еще остается тонкая проблема: Pylance в VSCode не отображает строку документации дескриптора так же, как это работает с свойством.
Вот демо.
Код: Выделить всё
class _UserID(object):
"""
note for test (wont show)
"""
def __get__(self, obj, _) -> int:
"""
note for test (wont show)
"""
return obj._user_id
def __set__(self, obj, val: int) -> int:
obj._user_id = int(val) if val else 0
return val
class UserWithCustomDescriptor(object):
user_id = _UserID()
def __init__(self) -> None:
self._user_id = 0
class UserWithProperty(object):
def __init__(self) -> None:
self._user_id = 0
@property
def user_id(self) -> int:
"""
note for test
"""
return self._user_id
@user_id.setter
def user_id(self, val: int) -> None:
self._user_id = int(val) if val else 0
if __name__ == "__main__":
user_prop = UserWithProperty()
user_prop.user_id = 42
print(f"{user_prop.__class__.__name__} - {user_prop.user_id}")
user_desc = UserWithCustomDescriptor()
user_desc.user_id = 42
print(f"{user_desc.__class__.__name__} - {user_desc.user_id}")

а строка документации user_desc.user_id не будет отображаться:

Я нашел аналогичный вопрос здесь python-docstring-for-descriptors, но ответ ниже не смог решить эту проблему.
И я также пытался найти решение в python-doc#properties. Кажется, что свойство вернет экземпляр, содержащий строку документации, вместо прямого значения. Возможно, это близко к окончательному ответу, но я уже застрял на этом этапе на несколько часов.
Подробнее здесь: https://stackoverflow.com/questions/728 ... -in-vscode
Мобильная версия