Как сделать так, чтобы расширение класса обнаруживалось Intellisense?Python

Программы на Python
Ответить
Anonymous
 Как сделать так, чтобы расширение класса обнаруживалось Intellisense?

Сообщение Anonymous »

Контекст
Я создаю пакет расширения поверх API Google под названием Google Earth Engine: geetools. Короче говоря, я хочу добавить к существующему объекту пакета дополнительные функции, которые являются повторяющимися или сложными для новых пользователей.
Выбор использования расширения продиктован взаимодействием клиента и сервера этого API и Я не могу использовать простое определение класса, если хочу оставаться на стороне сервера. Полное объяснение и вдохновение задокументировано здесь: https://geetools.readthedocs.io/en/late ... ttern.html
Проблема
Мои расширения прекрасно работают, но они остаются незамеченными Intellisence, поэтому при наведении курсора мыши на VSCode я не вижу никакой документации и прототипа, я не могу «перейти к определению» или даже увидеть имена параметров, что очень затрудняет их использование.
воспроизвести пример
Это совершенно ненужная перегрузка пустого класса, но она точно показывает, что я делаю и где происходит сбой:
< pre class="lang-py Prettyprint-override">

Код: Выделить всё

from typing import Callable

class Toto(object):

def __init__(self):
self.a = 1

def print(self):
print(self.a)

def register_class_accessor(klass: type, name: str) -> Callable:
"""Create an accessor through the provided namespace to a given class.

Parameters:
klass: The class to set the accessor to.
name: The name of the accessor namespace

Returns:
The accessor function to to the class.
"""

def decorator(accessor: Callable) -> object:
class ClassAccessor:
def __init__(self, name: str, accessor: Callable):
self.name, self.accessor = name, accessor

def __get__(self, obj: object, *args) -> object:
return self.accessor(obj)

# check if the accessor already exists for this class
if hasattr(klass, name):
raise AttributeError(f"Accessor {name} already exists for {klass}")

# register the accessor to the class
setattr(klass, name, ClassAccessor(name, accessor))

return accessor

return decorator

@register_class_accessor(Toto, "tools")
class Accessor:
"""Toolbox for the ``Toto`` class."""

def __init__(self, obj: ee.Array):
"""Initialize the Array class."""
self._obj = obj

def tool_print(self):
"""Print the array."""
print(f"tool object: {self._obj.a}")
Вызовы работают:

Код: Выделить всё

Toto().tools.tool_print()
>>>> tool object: 1
но поиск не работает:
[img]https://i.sstatic.net /iP79B2j8.png[/img]

Что мне следует изменить в своем коде, чтобы содержимое средства доступа обнаруживалось?

Подробнее здесь: https://stackoverflow.com/questions/791 ... tellisense
Ответить

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

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

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

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

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