使方法 return 成为子类的对象

Make a method return an object of a subclass

我想为 class 提供方法,以便将其转换为特殊情况,由子class 表示。我不确定,但是最好的方法是什么。

这是一个说明性的例子:

class Vector(pd.Series):
    def normalize(self) -> "NormalizedVector":
        result: "NormalizedVector" = self / sum(self)  # type:ignore
        return result

class NormalizedVector(Vector):
    pass

但是此实现存在问题:

所以我的问题是:实现此目的的简洁方法是什么?

我发现的替代方法是使用动态分配:

class Vector(pd.Series):
    pass

class NormalizedVector(Vector):
    pass

def normalize_vector(self: Vector) -> NormalizedVector:
    return NormalizedVector(self / sum(self))

Vector.normalize = normalize_vector

但是:

单独的类型提示不会导致值成为被提示的类型。您需要创建 一个实例。您的第二种方法有效,因为您实际上创建了该实例。显式赋值是不必要的。

class Vector(pd.Series):
    def normalize(self) -> "NormalizedVector":
        return NormalizedVector(self / sum(self))

class NormalizedVector(Vector):
    pass