我有类Node
的对象,它们通过id进行比较。现在我还有一些具有特殊含义的节点,SpecialNodeA
和SpecialNodeB
。它们没有任何属性,只是通过成为那种类型/那个对象来传达它们的特殊含义。它将它们称为“魔术物体”,因为它们具有类似“神奇数字”的功能。
正如在下面的评论中所说:我正在寻找像单身人士一样的东西。它将与其他类型进行比较,不应该抛出异常,只需给出错误。
我目前按以下方式进行:
class Node:
def __eq_(self, other)
return (self.id == other.id)
class SpecialNodeA:
pass;
class SpecialNodeB:
pass;
spNoA = SpecialNodeA() #
spNoB = SpecialNodeB()
n1 = Node(id = 1)
specialNodeA1 = spNoA
specialNodeA2 = spNoA
specialNodeB1 = spNoB
specialNodeB2 = spNoB
print(n1 == specialNode1) # should return false
print(specialNodeA1 == specialNodeA2) # should return true
print(specialNodeA1 == specialNodeB2) # should return false
它运作正常,但是有一种“更加pythonic”的方式来实现这样的“魔术对象”吗?
答案 0 :(得分:0)
我可能会使用enum:
from enum import Enum
class SpecialNodes(Enum):
A = 1
B = 2
或者如果你想要实际的节点:
class SpecialNodes(Enum):
A = Node()
B = Node()
样品:
>>> class Node:
... pass
...
>>> class SpecialNodes(Enum):
... B=Node()
... A=Node()
...
>>> A1 = SpecialNodes.A
>>> A2 = SpecialNodes.A
>>> B1 = SpecialNodes.B
>>> A1 == A2
True
>>> A1 == B1
False