我正在尝试创建一个简单的数据类型,用作Numpy数组的dtype,我可以在其上执行元素加法,减法和比较。该类型应采用(至少)三个值,表示真,假,和不关心" (DC)。后者等于真和假,并且在加法和减法中表现为零:
>>> MyDtype(True) == MyDtype(DC) == MyDtype(True) # note reflection
True
>>> MyDtype(False) == MyDtype(DC) == MyDtype(False) # ditto
True
>>> MyDtype(True) == MyDtype(False)
False
>>> MyDtype(True) - MyDtype(DC) == MyDtype(True)
True
>>> MyDtype(DC) + MyDtype(False) == MyDtype(False)
True
我完全不知道如何以理智的方式获得这些语义。
答案 0 :(得分:1)
您可以使用魔术函数来控制类对象的算术运算。如果左侧的对象未实现相应的非反射操作,则可以控制甚至反射的操作。
这里可以找到魔术方法的综合文档(链接指的是算术运算符部分,后面是关于反射算术运算的部分): http://www.rafekettler.com/magicmethods.html#numeric
我遇到了同样的问题并编写了一个类,其对象是非关注符号。它不是你要求的,因为它没有包装值,但它应该很容易适应你的需要。 你可以在这里得到它: https://github.com/keepitfree/nicerpython
from symbols import dontcare
True == dontcare == True
>>> True
False == dontcare == False
>>> True
True == False
>>> False
True - dontcare == True
>>> True
dontcare + False == False
>>> True