【问题标题】:Python, using an Object as a dictionary key?Python,使用对象作为字典键?
【发布时间】: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


【解决方案1】:

为什么不添加一个将键名更改为字典的方法? 例如:

class Example(dict):
    def change(self, name, new_name):
        self[new_name] = self.pop(name)
        return self

x = Example({'hi':'Hello'})
print(x)
x.change('hi','hello')
print(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2018-05-06
    • 1970-01-01
    • 2011-10-09
    • 2011-10-23
    • 2010-10-12
    • 2010-10-02
    相关资源
    最近更新 更多