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

max*_*yue 13 python

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

c = Card(1)
d = -c
Run Code Online (Sandbox Code Playgroud)

我希望d成为一个Card对象并d.val成为-1.我怎么能这样做?

khe*_*ood 21

听起来你希望一元减号运算符Card返回一个值为negated的新卡.如果这是你想要的,你可以__neg__在你的类上定义运算符,如下所示:

class Card:
    def __init__(self, val):
        self.val = val
    def __neg__(self):
        return Card(-self.val)
Run Code Online (Sandbox Code Playgroud)

__neg__包含在可以重写以自定义算术运算的方法列表中:https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types

  • 我如何知道所有预定义的函数,例如__neg__? (2认同)