python - 如何在声明类之前为类中使用的类型添加别名?

标签 python types type-hinting

我有与此示例类似的代码

import typing

class C():
    def __init__(self, callback: typing.Callable[[C], int]):
        self._callback = callback

    def getCallback() -> typing.Callable[[C], int]:
        return self._callback

class C2():
    def __init__(self, cInstance: C):
        self._cInstance = cInstance

    def f() -> typing.NoReturn:
        self._cInstance.getCallback()(self.cInstance)

我想为 typing.Callable[[C], int] 添加类型别名

但是当我尝试这样做时

import typing

CallbackType = typing.Callable[[C], int] # ERROR: C not defined

class C():
    def __init__(self, callback: CallbackType):
        self._callback = callback

    def getCallback() -> CallbackType:
        return self._callback

class C2():
    def __init__(self, cInstance: C):
        self._cInstance = cInstance

    def f() -> typing.NoReturn:
        self._cInstance.getCallback()(self.cInstance)

我收到错误,当时未定义C。如果我在class C之后定义CallbackType,则CallbackType不会在C__init__中定义。在示例中,输入足够短,但在我的实际代码中,它非常复杂,这就是我想添加别名的原因。

最佳答案

您可以使用forward references :

CallbackType = typing.Callable[['C'], int]

关于python - 如何在声明类之前为类中使用的类型添加别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75955196/

相关文章:

python - 在 Python 中拆分数组

C# - 在泛型方法中使用运行时定义的类型作为参数

c# - 私有(private)诠释? _城市_Id;谁能告诉我 "?"在这里是什么意思

function - Bigloo:函数参数的类型提示

python - 如何使用 Python HTML Parser 提取特定链接

python - 如何将 Mixins 与 SQLAlchemy 结合使用来简化查询和过滤操作?

C++ 在编译时检查类型

python - 用于 python 类型提示检查的控制台工具

Python 类型提示 : What does Callable followed by a TypeVar mean?

python - 如果转换为序列或映射,则要进行不同转换的类