1. ホーム
  2. python-3.x

[解決済み] Radd法によるクラス間加算

2022-02-28 09:33:40

質問

2つの異なるクラスがあり、片方のクラスにのみ追加を定義したいのですが、両方のクラスで __add____radd__ は、そのクラスに対して(下の例では ExampleClass2 . を作りたくはない。 __add__ に対して機能するメソッドです。 ExampleClass1 を追加します。 ExampleClass2 .

今のままでは無視されるだけです。また、raising errorも試してみましたが、これもうまくいきませんでした。

class ExampleClass1:
    def __init__(self, data):
        self.data = data
        
    def __add__(self, other):
        if isinstance(other, int):
            print('other was an int')
        
        
class ExampleClass2:
    def __init__(self, data):
        self.data = data
        
    def __add__(self, other):
        if isinstance(other, ExampleClass1):
            print("it's working")
            
    __radd__ = __add__
    
a = ExampleClass1('q')

b = ExampleClass2('w')

a+b

解決方法は?

__radd__ が呼び出されるのは、左側のオブジェクトに __add__ メソッドを呼び出すか、そのメソッドが 2 つのオブジェクトを追加する方法を知らないか (この場合は NotImplemented ). どちらのクラスも __add__ メソッドを返さない NotImplemented . したがって __radd__ メソッドが呼び出されることはありません。