TypeError: unhashable type: 'Position'
时间: 2023-12-07 11:37:01 浏览: 92
python内置的集合set中元素顺序-python基础教程:set(集合).pdf
TypeError: unhashable type: 'Position'通常是由于在使用字典时,将不可哈希的对象作为键而导致的错误。在Python中,可哈希的对象是指那些不可变的对象,例如整数、浮点数、字符串、元组等。而不可哈希的对象则是指那些可变的对象,例如列表、字典、集合等。因此,如果我们将一个不可哈希的对象作为字典的键,就会出现TypeError: unhashable type: 'xxx'的错误。
下面是一个例子,演示了如何使用自定义类作为字典的键,从而导致TypeError: unhashable type: 'Position'的错误:
```python
class Position:
def __init__(self, x, y):
self.x = x
self.y = y
p = Position(1, 2)
d = {p: 'test'} # 将Position对象作为字典的键
```
在上面的例子中,我们定义了一个Position类,该类包含x和y两个属性。然后我们创建了一个Position对象p,并将其作为字典d的键。由于Position对象是不可哈希的,因此当我们运行上面的代码时,就会出现TypeError: unhashable type: 'Position'的错误。
为了解决这个问题,我们可以将Position类变为可哈希的,方法是实现__hash__()和__eq__()方法。下面是一个修改后的例子:
```python
class Position:
def __init__(self, x, y):
self.x = x
self.y = y
def __hash__(self):
return hash((self.x, self.y))
def __eq__(self, other):
return self.x == other.x and self.y == other.y
p = Position(1, 2)
d = {p: 'test'} # 将Position对象作为字典的键
```
在上面的例子中,我们实现了__hash__()和__eq__()方法,使得Position对象变为可哈希的。这样,当我们将Position对象作为字典的键时,就不会出现TypeError: unhashable type: 'Position'的错误了。
阅读全文