К сожалению, я не могу решить некоторые проблемы с набором текста (я новичок в наборе текста с помощью Python). Похоже, это общая проблема или недопонимание с моей стороны, поэтому я создаю этот пост. Я ознакомился с несколькими концепциями, такими как дженерики или протоколы, но мне не удалось создать работающее решение, и я не думаю, что полностью понимаю, какое решение может быть лучшим для этого.
Вот мой пример кода:
Код: Выделить всё
from collections.abc import Callable
from typing import TypeVar
from requests import Response
_T = TypeVar("_T", default=Response)
def identity(response: Response) -> Response:
return response
def extract_text(response: Response) -> str:
return response.text
class HTTPRequestsAPI:
def fake_request(self, response_handler: Callable[[Response], _T] = identity) -> _T:
response = Response()
processed_response = response_handler(response)
return processed_response
if __name__ == "__main__":
request_api = HTTPRequestsAPI()
resp = request_api.fake_request()
print(type(resp))
resp_text = request_api.fake_request(response_handler=extract_text)
print(type(resp_text))
Код: Выделить всё
Код: Выделить всё
error: Incompatible default for argument "response_handler" (default has type "Callable[[Response], Response]", argument has type "Callable[[Response], _T]") [assignment]
**В этом примере я использую python = 3.13 и mypy = 1.13.0. Я также пробовал использовать TypeVar без значения «по умолчанию», но это не имело никакого значения, и я подумал, что значение по умолчанию может помочь машинисту.
Подробнее здесь: https://stackoverflow.com/questions/792 ... able-argum