作爲一個人爲的例子,假設我在python中生成一個隨機水果籃。我創建籃子:覆蓋python類上的__or__運算符
basket = FruitBasket()
現在我想指定籃子中可能發生的特定水果組合。假設我是一個非常挑剔的傢伙,籃子裏必須裝滿蘋果和石榴,橘子和葡萄柚,或者只有香蕉。
我正在閱讀python運算符重載,並且好像我可以定義__or__
和__and__
以獲得我想要的行爲。我想我可以做這樣的事情:
basket.fruits = (Apple() & Pomegranate()) | (Banana()) | (Orange() & Grapefruit())
這只是正常做兩個班(Or
和And
)。當__or__
或__and__
被調用,我只是返回一個新的Or
或And
對象:
def __or__(self, other):
return Or(self, other)
def __and__(self, other):
return And(self, other)
我試圖弄清楚是怎麼做的我做,而不必首先實例化的成果?爲什麼我不能在基類Fruit
類上使用靜態__or__
方法?我試過,但它不工作:
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'
任何思考如何做這個工作?
正是我一直在試圖找到!謝謝!很棒 – 2013-02-21 18:00:37