Как напечатать возврат метода объекта, чтобы следовать функции, которую он получает во время инициализации?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как напечатать возврат метода объекта, чтобы следовать функции, которую он получает во время инициализации?

Сообщение Anonymous »

Это вопрос о типе Python, но я думаю, что немного контекста поможет, прежде чем мы перейдем к сути проблемы.
У меня есть класс, который принимает два параметра :
  • Сигнал – это то, что «излучается» клиентами наружу.
  • Слот – это связано с сигнал для выполнения при отправке.
Вы соедините их, выполнив Signal.connect(Slot). Это соединение является постоянным до тех пор, пока вы снова явно не отключитесь, и слот будет выполняться при каждом излучении сигнала. (Для тех, кто знаком, это библиотека Qt PySide2). Я создаю объект, который гарантирует, что слот будет выполнен только один раз при первом испускании, а затем отключится от сигнала, но я изо всех сил пытаюсь правильно ввести подсказку с двумя ошибками mypy:

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

import typing as _t

from Qt import QtCore as _QtCore

_R = _t.TypeVar("_R")

class SingleShotConnect:
_INSTANCES: _t.ClassVar[_t.Set["SingleShotConnect"]] = set()

def __init__(
self,
signal: "_QtCore.SignalInstance",
slot: _t.Callable[..., _R],
) -> None:
self._signal = signal
self._slot = slot
self._signal.connect(self._single_shot_wrapper)
SingleShotConnect._INSTANCES.add(self)

# error: A function returning TypeVar should receive at least one argument containing the same TypeVar  [type-var]
def _single_shot_wrapper(self, *args, **kwargs) -> _R:
self._signal.disconnect(self._single_shot_wrapper)
SingleShotConnect._INSTANCES.remove(self)

# error: Incompatible return value type (got "_R@__init__", expected "_R@_single_shot_wrapper")
return self._slot(*args, **kwargs)
Как видите, есть две ошибки, связанные с _single_shot_wrapper(), которые я не знаю, как исправить? У меня нет доступа к ParamSpec, если это возможно из-за ограничений версии Python.


Подробнее здесь: https://stackoverflow.com/questions/792 ... eceives-du
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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