我有一个例子集合。计数器类,我还有一些对象,比如:
p1 = Person(name='John')
p2 = Person(name='John')
p3 = Person(name='Jane')
我想在一个Counter实例中保存这个person对象的计数,考虑到具有相同名称的person对象必须增加相同的person计数,因此如果我有一个包含所有person对象的列表:
^{pr2}$我用它填充我的计数器:
c = Counter(people)
我想得到以下信息:
c[p1] #prints 2
c[p2] #prints 2
c[p3] #prints 1
我的第一次尝试是为person对象实现一个新的__eq__
方法
def __eq__(self, other):
return self.name == other.name
我认为这是可行的,因为计数器对象似乎增加了计数 对于基于键对象相等的键,例如:
c = Counter(['A', 'A', 'B'])
c['A'] #prints 2
c['B'] #prints 1
另一个尝试可以从计数器继承并重写
计数器用于测量物体之间的相等,我不确定,但我认为
Counter为此使用__contains__
方法。在
我的问题是,是否有任何方法可以在不使用继承的情况下获得这种行为,如果没有,最好的方法是什么?。在
如果您的对象像您的示例中那样简单,请使用
collections.namedtuple
实施{cd1>还必须:
现在您的代码可以工作了:
^{pr2}$相关问题 更多 >
编程相关推荐