2016-04-09 2 views
0

私はクラスNodeのオブジェクトを持っており、idで比較します。今私はまた、特別な意味のノード、SpecialNodeASpecialNodeBを持っています。彼らはどんなプロパティも持っていません、それらはその型/そのオブジェクトであることによって特別な意味を伝えます。 「マジックナンバー」と似た機能を持っているので、「マジックオブジェクト」と呼んでいます。「マジックナンバー」の意味での「マジックオブジェクト」を表現する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 

をそれが正常に動作しますが、そのような「魔法のオブジェクトを」実装する「より神託」方法は何ですか?

from enum import Enum 
class SpecialNodes(Enum): 
    A = 1 
    B = 2 

それとも、実際のノードをしたい場合:

+0

それはあなたが求めて何不明です。 'SpecialNodeA'と' SpecialNodeB'が自分自身に等しいシングルトンと複数の 'Node'インスタンス(異なるIDを持つ)であるように思えますが、私は本当に分かりません。それは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)になりますか? –

+0

これを質問に追加しましたが、コード例を考えるとかなり明確になるはずです。 – Michael

答えて

0

は、私はおそらくenum使用する

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 
関連する問題