簡體   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