如何在Python中重载一元负(减)运算符?

30
class Card():
    def __init__(self, val):
        self.val = val

c = Card(1)
d = -c

我希望d是一个Card对象,d.val的值为-1。我该如何实现?

1个回答

49

看起来你想让 Card 上的一元减号运算符返回一个数值取反的新卡牌。如果是这样,你可以像这样在你的类上定义 __neg__ 运算符:

class Card:
    def __init__(self, val):
        self.val = val
    def __neg__(self):
        return Card(-self.val)

__neg__被包含在可以重写以自定义算术操作的方法列表中,具体请参见文档:模拟数值类型


4
如何了解所有预定义函数,比如__neg__? - max yue
相当有帮助 :) - akash karothiya
1
这在Python文档中被描述为模拟数字类型。你所询问的操作是“一元减法”。一元意味着它作用于一个操作数。https://docs.python.org/2.7/reference/datamodel.html#special-method-names - Bennett Brown
1
请参考Python文档中关于Python运算符的页面,@maxyue。 - Bex T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接