[英]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.