繁体   English   中英

在 Python 中,有没有一种方法可以自动将派生的 class 操作结果从继承自父 class 的操作符转换为派生的 ZA2F22ED4F8EBC2CBB14

[英]In Python, is there a way to automatically cast derived class operation results from an operator inherited from parent class to that derived class?

假设我从父 class 制作了一个自定义 class ,其中定义了各种运算符( +-*/等),并且我想保持这些运算符的工作方式。 但是,在不覆盖运算符的情况下,它们的返回值是父 class 类型。 有没有一种方便的方法可以将运算符结果自动转换为我的派生 class 类型?

这是一个示例MySeries是基于 Pandas Series class 的 class。

import pandas as pd

class MySeries(pd.Series):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

如果我从中创建一些实例,它们将是MySeries类型,这很好。

s1 = MySeries([1,2,3])
s2 = MySeries([4,5,6])

type(s1)
>>> __main__.MySeries

但是当我执行+之类的操作时,返回的值变成了父 class:

type(s1+s2)
>>> pandas.core.series.Series

我希望type(s1+s2)可以是MySeries类型。 我知道一个愚蠢的方法是覆盖例如__add__()方法:

class MySeries(pd.Series):
    def __add__(self, other):
        return self.__class__(super().__add__(self, other))

但是对所有操作员做同样的事情是相当乏味的。

有没有更优雅的方法来做到这一点?

这似乎可以解决问题:

class MySeries(pd.Series):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    @property
    def _constructor(self):
        return MySeries

为了找到这个,我使用调试器逐步完成了加法运算,以便找到新值的创建位置。 它最终为此调用了 pd.Series._constructor。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM