【发布时间】:2014-12-18 01:15:57
【问题描述】:
我有以下代码,这让我摸不着头脑 -
class Element:
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
def eq(self, other):
print('comparing {} to {} ({})'.format(self.name,
other.name,
self.name == other.name))
return self.name == other.name
Element.__eq__ = eq
elements = [
Element('a'),
Element('b'),
Element('c'),
Element('d')
]
print('before {}'.format(elements))
elements.remove(elements[3])
print('after {}'.format(elements))
产生以下输出 -
before [a, b, c, d]
comparing a to d (False)
comparing b to d (False)
comparing c to d (False)
after [a, b, c]
为什么eq() 不输出comparing d to d (True)?
我使用猴子修补 __eq__ 而不是简单地在我的 Element 类中实现它的原因是因为我在使用我正在使用的库之一实现它之前测试猴子修补的工作原理。
【问题讨论】:
标签: python list python-3.x