Заявление об ограничении ответственности : Это решение не работает во всех случаях использования, см. Комментарии. Я оставляю его здесь, поскольку он все еще может быть полезен при некоторых обстоятельствах.
Я не знаю о линтере и Sphinx, но IDE, такая как PyCharm, распознает метод, если вы объявите его заранее, используя подсказку типа. В приведенном ниже коде без строки load: Callable[[], None]
я получаю предупреждение «Неразрешенная ссылка на атрибут», но со строкой в файле нет предупреждений. См. docs для получения дополнительной информации о подсказках типов.
Примечания:
- Даже с более общим
load: Callable
проверка типов удовлетворительна. - Если вы не всегда объявляете вызываемый объект, допустимое объявление -
load: Optional[Callable] = None
. Это означает, что значение по умолчанию - Нет. Если вы затем вызовете его, не задав его, вы получите сообщение об ошибке, но оно у вас уже есть, это не связано с этим набором.
ps У меня нет вашего utils
, поэтому я определил некоторые функции в самом файле.
from typing import Callable
def save():
pass
def load():
pass
class C:
load: Callable[[], None]
save = save
setattr(C, 'load', load)
C.load()