【发布时间】:2021-12-17 07:41:35
【问题描述】:
在 Python 中,有没有使用对对象的引用作为字典键的方法?
假设我有一个类如下:
class Example:
def __init__(self, id):
self.id = id
def __hash__(self):
return hash(self.id)
def __eq__(self, other):
if self.id == other.id:
return True
return False
然后,如果我创建我的类的一个实例:
object = Example("My object")
在 Python 中有什么方法可以使用对象 object 作为字典的键,而不定义 __hash__ 和 __eq__ 方法?
就目前而言,如果我这样做:
instances = {object: 1}
后来决定要改object的id
object.id = "Not my object"
我希望字典“知道”我更改了 id,但在此实现中不会更改,因为键不是对对象本身的引用。有没有办法在 Python 中解决这个问题?
谢谢!
【问题讨论】:
-
不,我认为没有办法做到这一点。出于好奇,你为什么要做这样的事情?
-
如果您不定义
__hash__和__eq__方法怎么办? -
@mkrieger1 这将产生对象身份作为相等和散列基础的效果,这可能是合适的
-
您真的希望尽可能避免改变用作键的对象。至少,您需要确保在
__hash__和__eq__实现中使用不更改的字段,否则您将有一些真的 手上令人困惑的错误 -
最好不要命名
object,因为内置的object是Python中一切的基础。
标签: python python-3.x oop