Правильный способ показать строку документации дескриптора с помощью Pylance в VSCodePython

Программы на Python
Ответить
Anonymous
 Правильный способ показать строку документации дескриптора с помощью Pylance в VSCode

Сообщение Anonymous »

В моем проекте мне нужно использовать user_id в качестве поля во многих классах. Поэтому я пытаюсь сконцентрировать реализацию, используя один дескриптор вместо дублирования свойств повсюду.
Но все еще остается тонкая проблема: 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_prop.user_id, строка документации будет отображаться следующим образом:
Изображение

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

Я нашел аналогичный вопрос здесь python-docstring-for-descriptors, но ответ ниже не смог решить эту проблему.
И я также пытался найти решение в python-doc#properties. Кажется, что свойство вернет экземпляр, содержащий строку документации, вместо прямого значения. Возможно, это близко к окончательному ответу, но я уже застрял на этом этапе на несколько часов.

Подробнее здесь: https://stackoverflow.com/questions/728 ... -in-vscode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»