Я создаю пакет расширения поверх 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
Мобильная версия