我正在尝试创建一个简单的数据类型,用作 Numpy 数组的 dtype,我可以在其上执行元素明智的加法、减法和比较。该类型应具有(至少)三个值,分别表示真、假和“无关”(DC)。后者等于 true 和 false,并且在加法和减法中表现得像零:
>>> 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
我完全不知道如何以一种理智的方式获得这些语义。
最佳答案
您可以使用魔术函数来控制对您的类对象的算术运算。如果左侧的对象未实现相应的非反射操作,您甚至可以控制反射操作。
魔术方法的综合文档可以在这里找到(链接指向算术运算符部分,后面是关于反射算术运算的部分): http://www.rafekettler.com/magicmethods.html#numeric
我遇到了同样的问题并编写了一个类,其对象是 dontcare 符号。它不完全是您要求的,因为它不包装值,但应该很容易根据您的需要进行调整。 你可以在这里得到它: 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
关于Python - 具有 "don' t care"值的数字类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327372/