次の例では:
from typing import Callable, Generic, Type, TypeVar
ThetaType = TypeVar('ThetaType', bound=int)
XType = TypeVar('XType', bound=int)
class IteratedFunction(Generic[ThetaType, XType]):
def find_fixed_point(self,
theta: ThetaType,
x_init: XType) -> XType:
return x_init
def combinator(
iterated_function_cls: Type[
IteratedFunction[ThetaType, XType]]) -> Callable[
[IteratedFunction[ThetaType, XType]], XType]:
old_find_fixed_point = iterated_function_cls.find_fixed_point
def new_find_fixed_point(
iterated_function: IteratedFunction[ThetaType, XType],
theta: ThetaType,
x_init: XType) -> XType:
return old_find_fixed_point(iterated_function, theta, x_init)
return new_find_fixed_point
MyPyさんのコメント:
a.py:25: error: Incompatible return value type (got "XType", expected "XType")
a.py:25: error: Argument 1 has incompatible type "IteratedFunction[ThetaType, XType]"; expected "IteratedFunction[ThetaType, XType]"
a.py:25: error: Argument 2 has incompatible type "ThetaType"; expected "ThetaType"
a.py:25: error: Argument 3 has incompatible type "XType"; expected "XType"
a.py:27: error: Incompatible return value type (got "Callable[[IteratedFunction[ThetaType, XType], ThetaType, XType], XType]", expected "Callable[[IteratedFunction[ThetaType, XType]], XType]")
@ user2357112supportsMonicaどうすれば修正できるでしょうか?
—
Neil G
github.com/python/mypy/issues/708をご覧ください。優先度ではない既知の問題のようです。関連しているかどうか確認してください
—
Harsha Goli
@HarshaGoli:一見同じように見えますが、メソッドの処理方法に起因するまったく異なる問題のようです。
—
user2357112はモニカ
@NeilG:私は個人的にそれをmypyのバグまたは欠陥のどちらかと考えます。
—
user2357112はモニカ
new_find_fixed_point
はThetaType
、およびの独自のインスタンス化を持つ汎用関数として解釈されるようですXType
。