假设我从具有各种运算符的父类创建了一个自定义类(+
、-
、*
、/
等)已定义,我想保持这些运算符的工作方式不变。但是,在不重写运算符的情况下,它们的返回值是父类类型。有没有一种方便的方法可以自动将运算符结果转换为我的派生类类型?
这是一个示例 - MySeries
是一个基于 Pandas 的 Series
类的类。
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
但是当我执行像+
这样的操作时,返回值变成父类:
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))
但是对所有运算符(operator)做同样的事情是相当乏味的。
有没有更优雅的方法来做到这一点?
最佳答案
这似乎可以解决问题:
class MySeries(pd.Series):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@property
def _constructor(self):
return MySeries
为了找到这一点,我使用调试器单步执行加法算术调用,以找到新值的创建位置。它最终为此调用了 pd.Series._constructor。
关于python - 在Python中,有没有一种方法可以自动将从父类继承的运算符的派生类操作结果转换为该派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63322507/