代码之家  ›  专栏  ›  技术社区  ›  Vanojx1

带有in运算符的自定义类奇怪行为集

  •  0
  • Vanojx1  · 技术社区  · 5 年前

    上这门课:

    class Element(object):
        __slots__ = ['x', 'y']
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        @property
        def pos(self):
            return (self.x, self.y)
    
        def move(self):
            self.x -= 1
    
        def __hash__(self): return hash(self.pos)
        def __eq__(self, x): return (x.pos if isinstance(x, Element) else x) == self.pos
        def __ne__(self, x): return (x.pos if isinstance(x, Element) else x) != self.pos
        def __repr__(self): return str(self.pos)
    

    现在我用板条箱装了一组元素:

    elements = set([Element(i, i) for i in range(10)])
    

    print((5, 5) in elements) # True
    print(elements)
    # {(4, 4), (8, 8), (5, 5), (7, 7), (0, 0), (9, 9), (1, 1), (3, 3), (2, 2), (6, 6)}
    for el in elements:
        el.move()
    print((4, 5) in elements) # False
    print(elements)
    # {(3, 4), (7, 8), (4, 5), (6, 7), (-1, 0), (8, 9), (0, 1), (2, 3), (1, 2), (5, 6)}
    
    0 回复  |  直到 5 年前