python - 在父类中为返回任何子类对象的方法键入提示

标签 python

我创建了一个 API,其中许多功能都在一个基类中实现,多个子类继承自该基类。当通过子类调用时,基类的方法将始终返回与子类相同类型的对象。我正在努力弄清楚如何正确键入提示不同方法的输出

作为一个简单的例子,假设我有以下类:

from copy import deepcopy


class BaseClass:
    def __init__(self, a: str, b: str) -> None:
        self.a = a
        self.b = b

    def copy(self):
        return deepcopy(self)


class SubClass(BaseClass):
    def __init__(self, x: float, a: str, b: str) -> None:
        super().__init__(a, b)
        self.x = x

我应该如何键入提示 BaseClass.copy() 以便清楚地知道如果从 SubClass 调用它会返回一个 SubClass 对象> 对象? (对于从 BaseClass 派生的任何其他类,等等)。

最佳答案

您可以使用 TypeVar :

from copy import deepcopy
from typing import TypeVar

T = TypeVar("T")

class BaseClass:
    def __init__(self, a: str, b: str) -> None:
        self.a = a
        self.b = b

    def copy(self: T) -> T:
        return deepcopy(self)

虽然T本身声明没有限制,但是通过self的注解来约束,所以copy会返回一个对象与其对应实例相同的类型。

关于python - 在父类中为返回任何子类对象的方法键入提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68082661/

相关文章:

python - 如何在不使用单独的替换函数的情况下循环正则表达式匹配并进行替换?

python - 尝试理解跨 python 模块的多处理和队列

python - 有没有办法在 Odoo 11 中动态地将字段添加到 TreeView 中?

Python 列表索引超出拆分返回值的范围

python - 查找字符串中出现的所有字符

python - 需要使用 `non-ndarray sequence` 进行 numpy 基本索引的示例

python - 如何设置一个 Python 代码库以使用另一个 Python 代码库并将其打包到生产环境?

python - Anaconda Tensorflow 运行时问题

python - 如何缩放直方图 Pandas 图的 y 轴?

python - 按空格分割 unicode 字符串(希伯来语)并查找字数