gpt4 book ai didi

python - 在 Python 中,有没有办法将派生类操作结果从从父类继承的运算符自动转换为派生类?

转载 作者:行者123 更新时间:2023-12-04 09:12:39 26 4
gpt4 key购买 nike

假设我从定义了各种运算符( +-*/ 等)的父类创建了一个自定义类,并且我想保持这些运算符的工作方式。但是,在不覆盖运算符的情况下,它们的返回值属于父类类型。是否有一种方便的方法可以将运算符结果自动转换为我的派生类类型?
这是一个例子——MySeries是基于 Pandas 的类 Series类(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
但是当我进行类似 + 的操作时,返回值成为父类:
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。

关于python - 在 Python 中,有没有办法将派生类操作结果从从父类继承的运算符自动转换为派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63322507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com