Это действительно два вопроса:
Почему оператор членства (__contains__) никогда не вызывается?
Почему D в nodeList, а не в nodeSet?
Моя цель - чтобы D был "в" как nodeList, так и nodeSet, потому что он имеет тот же loc, что и A.
class Node(object):
def __init__(self, loc):
self.loc = loc
def __eq__(self, other):
print "eq: self.getLoc(): {}, other.getLoc(): {}".format(self.getLoc(), other.getLoc())
if self.getLoc() == other.getLoc():
return True
return False
def __contains__(self, other):
print "contains: self.getLoc(): {}, other.getLoc(): {}".format(self.getLoc(), other.getLoc())
if self.getLoc() == other.getLoc():
return True
return False
def setLoc(self, loc):
self.loc = loc
def getLoc(self):
return self.loc
if __name__ == "__main__":
A = Node((1,1))
B = Node((2,2))
C = Node((3,3))
D = Node((1,1))
nodeList = [A, B, C]
nodeSet = set()
nodeSet.add(A)
nodeSet.add(B)
nodeSet.add(C)
print "A in nodeList: {}".format(A in nodeList)
print "A in nodeSet: {}".format(A in nodeSet)
print "D in nodeList: {}".format(D in nodeList)
print "D in nodeSet: {}".format(D in nodeSet)
Возвращает True, True, True, False. По-видимому, оператор __contains__ никогда не вызывается. Я хотел бы, чтобы он вернул Истину, Истину, Истину, Истину.
Любая другая критика моего кода, конечно, приветствуется, так как я новичок в Python.