【问题标题】:operator overload python custom class运算符重载python自定义类
【发布时间】:2014-07-03 23:19:14
【问题描述】:

假设我想为我创建的某个类重载一个运算符(现在说+),

class A (object):
    #code here

然后:

a = A()
b = A()

我会怎么定义:

c = a + b

或类似的东西? (注意:这个问题纯粹是理论上的,我可能会在某个时候使用它,只是目前不会(除非它真的很容易而且我真的需要使用它))

(p.s. 如果可以为其他事情执行此操作,例如andornotstr 等)

【问题讨论】:

    标签: class python-2.7 operator-overloading


    【解决方案1】:

    由于A 是二元运算符的第一个操作数,您应该定义A.__add__()。如果A 是第二个操作数并且无法更改第一个操作数的类,则必须定义A.__radd__()

    Full reference for magic methods

    【讨论】:

    • 谢谢,他们有办法为andornot 执行此操作吗?
    • 可以说我想在课堂外def __pow__(self, y)。更好的是重新定义它来表示列表类型。我该怎么做?有可能吗?
    • 在类之外定义方法并在之后对其进行修补是可能的。用魔术方法来做是有问题的。但是对 C 中定义的类型进行猴子修补是不可能的。
    • 哦!我不知道列表是在 C 中预定义的!
    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多