У меня есть объекты класса Node
, они сравниваются с идентификатором. Теперь у меня также есть узлы со специальным значением, SpecialNodeA
и SpecialNodeB
. У них нет никаких свойств, они просто переносят свое особое значение, будучи тем типом/этим объектом. Это назовёт их «магическими объектами», поскольку они имеют аналогичную функцию «магические числа».Pythonic способ описать «магические объекты» (в смысле «магических чисел»)
Как было сказано в комментарии ниже: Я ищу что-то вроде синглтона, которое только равно себе. Он будет сравниваться с другими типами и не должен генерировать исключение, просто дайте false.
я в настоящее время сделать это следующим образом:
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
Он отлично работает, но есть «более вещий» способ реализации таких «волшебных предметов»?
Неясно, что вы просите. Пахнет, если вы хотите, чтобы «SpecialNodeA» и «SpecialNodeB» были одиночными, равными только самим себе, и несколькими экземплярами «Node» (с разными идентификаторами), но я не уверен. Возможно, это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? –
Я добавил это в вопрос, но я думаю, что это должно быть довольно ясно, учитывая пример кода. – Michael