不自然な例として、Python でランダムなフルーツ バスケットを生成するとします。バスケットを作成します。
basket = FruitBasket()
ここで、バスケットに含まれる果物の特定の組み合わせを指定したいと思います。私が非常にうるさい男で、バスケットがリンゴとザクロ、オレンジとグレープフルーツ、またはバナナだけでいっぱいである必要があるとします。
Python 演算子のオーバーロードについて調べていたのですが、必要な動作を定義__or__
し__and__
て取得できるようです。私はこのようなことができると思います:
basket.fruits = (Apple() & Pomegranate()) | (Banana()) | (Orange() & Grapefruit())
これは、2 つのクラス (Or
とAnd
) を作成するのに問題なく機能します。__or__
orが呼び出されると、新しいorオブジェクト__and__
を返すだけです。Or
And
def __or__(self, other):
return Or(self, other)
def __and__(self, other):
return And(self, other)
私が理解しようとしているのは、最初に果物をインスタンス化することなくこれを行うにはどうすればよいですか? 基本クラスで静的__or__
メソッドを使用できないのはなぜですか? Fruit
私はこれを試しましたが、うまくいきません:
class Fruit(object):
@classmethod
def __or__(self, other):
return Or(self, other)
そして果物を割り当てる:
basket.fruits = (Apple & Pomegranate) | (Orange & Grapefruit) | (Banana)
次のようなエラーが表示されます。
TypeError: unsupported operand type(s) for |: 'type' and 'type'
これを機能させる方法について何か考えはありますか?