Python:计数器未考虑namedtuple的类名。。。我怎么修理?

Python:计数器未考虑namedtuple的类名。。。我怎么修理?,python,Python,为什么计数器不区分两类namedtuple?namedtuple,顾名思义,就是元组。他们从元素上进行比较。因为两个元组都将Mike作为第一个也是唯一的元素,所以它们是相等的。他们是不同的阶层并不重要;只比较内容 如果您想比较类本身,则必须编写自己的包装器类。一种简单的可能性是制作一个包含类名作为元组元素的包装器,这样employee Mike将成为employee,Mike,patient Mike将成为patient,Mike。命名元组,顾名思义,就是元组。他们从元素上进行比较。因为两个元组

为什么计数器不区分两类namedtuple?

namedtuple,顾名思义,就是元组。他们从元素上进行比较。因为两个元组都将Mike作为第一个也是唯一的元素,所以它们是相等的。他们是不同的阶层并不重要;只比较内容


如果您想比较类本身,则必须编写自己的包装器类。一种简单的可能性是制作一个包含类名作为元组元素的包装器,这样employee Mike将成为employee,Mike,patient Mike将成为patient,Mike。

命名元组,顾名思义,就是元组。他们从元素上进行比较。因为两个元组都将Mike作为第一个也是唯一的元素,所以它们是相等的。他们是不同的阶层并不重要;只比较内容


如果您想比较类本身,则必须编写自己的包装器类。一种简单的可能性是制作一个包含类名作为元组元素的包装器,这样employee Mike将成为employee,Mike,patient Mike将成为patient,Mike。

更容易包装一个命名的元组,或者修改,比如说,employee类的哈希值,使其evalute成为hash'employee',name?@MikeRand:修改哈希值是不够的,如果您的Patient类也使用name来存储其名称,则还必须修改_eq。否则,员工和患者仍然会比较平等。@BrenBarn:对不起,我的意思是,将有一个基类具有uu hash u=hashself.u class u名称uu?哪里是一些属性序列。我希望包含self.\uuuuu class\uuuuuu.\uuuuuu name\uuuuu可以让员工和患者在字典中区分自己,对吗?@MikeRand:不,正如我所说,修改散列是不够的。您还必须修改_ueq__;以获得兼容的定义。请参阅。更容易包装一个namedtuple或修改(例如)Employee类的哈希值以计算“Employee”,name?@MikeRand:修改哈希值是不够的,如果您的患者类也使用name来存储其名称,您还必须修改u_eq_u_u。否则,员工和患者仍然会比较平等。@BrenBarn:对不起,我的意思是,将有一个基类具有uu hash u=hashself.u class u名称uu?哪里是一些属性序列。我希望包含self.\uuuuu class\uuuuuu.\uuuuuu name\uuuuu可以让员工和患者在字典中区分自己,对吗?@MikeRand:不,正如我所说,修改散列是不够的。您还必须修改_ueq__;以获得兼容的定义。看见
>>> Employee = namedtuple("Employee", "name")
>>> Patient = namedtuple("Patient", "name")
>>> e = Employee("Mike")
>>> p = Patient("Mike")
>>> Counter([e, p])
Counter({Employee(name='Mike'): 2})