这是我为 self 的可调用成员创建类型提示的尝试。
问题是如何在
Example
类中正确键入此函数,以便在下面的示例部分中,前两个示例有效,但第三个示例无效。
def run(self, fn: Callable[[CallableMemberOfExample], dict], *args, **kwargs) -> dict:
在示例中,因此这个示例
from typing import Callable, TypeVar
CallableMemberOfExample = TypeVar("CallableMemberOfExample", bound="Example")
class Example:
def test(self, *args, **kwargs) -> dict:
return {"fn": "test", "args": args, "kwargs": kwargs}
def another_test(self, *args, **kwargs) -> dict:
return {"fn": "test2", "args": args, "kwargs": kwargs}
def run(self, fn: Callable[[CallableMemberOfExample], dict], *args, **kwargs) -> dict:
return fn(*args, **kwargs)
def yet_another_test(*args, **kwargs) -> dict:
return {"fn": "test2", "args": args, "kwargs": kwargs}
# Example usage
example = Example()
example.run(example.test) # Works
example.run(example.another_test) # Works
example.run(yet_another_test) # This should be highlighted as type error but it doesn't.
Python 的类型注释系统无法表达您想要执行的操作。没有对应的类型。