作为一个人为的例子,假设我在 python 中生成一个随机的水果篮。我创建了篮子:
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)
我想弄清楚的是如何在不必先实例化水果的情况下做到这一点?为什么我不能__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'
关于如何使这项工作的任何想法?