代码如下:
>>> class Negative:
... pass
>>> class Positive:
... @classmethod
... def __neg__(cls):
... return Negative
所以我尝试一下。
>>> -Positive is Negative
TypeError: bad operand type for unary -: 'type'
这个可以正常工作。
>>> -Positive() is Negative
True
同样,对于其他一元运算符及其相关的“魔术”方法(例如
~
和__invert__
,+
和__pos__
等),也是如此。它为什么适用于实例而不适用于类?我该如何让它工作?
编辑:我已按建议修改代码,将魔术方法移动到元类中。
class Negative: pass
class PositiveMeta(type):
def __neg__(cls):
return Negative
class Positive(metaclass=PositiveMeta): pass