在Python中,对象可以用作字典中的键吗?

在Python中,对象可以用作字典中的键吗?,python,oop,dictionary,Python,Oop,Dictionary,我有一些令人费解的代码,我正试图迁移到Typescript。看看这个: def add_Octopus(self, code, cracker, fate, description, arm_number, ink_content, fate_pointer, churlishness=None): self.special_octopoda[ Octopus(code, description, arm_number, fate, churlishness, s

我有一些令人费解的代码,我正试图迁移到Typescript。看看这个:

    def add_Octopus(self, code, cracker, fate, description, arm_number, ink_content, fate_pointer, churlishness=None):
    self.special_octopoda[
        Octopus(code, description, arm_number, fate, churlishness, self, ink_content, fate_pointer)] = fate_pointer, cracker

在我看来,好像章鱼对象被用作名为special_octopoda的字典中的一个键。Python中允许这样做吗?它当然不是在Typescript/Javascript中

是的,您可以使用任何不可变对象作为Python字典中的键


Octopus类必须以某种方式创建不可变的实例。例如,它可能是tuple的一个子类,也可能使用uuu slots来实现这一点。

在python中,只有不可变类型可以用作键。对于可能的解决方法,请将其包装为元组:

self.special_octopoda(<something>, Octopus(...))

唯一的限制是键必须是不可变的,hashableDictionary键必须是可散列的-不能使用可变对象。在自定义类上,您可以创建所需的方法以允许它们用作键。只有不可变类型才能用作key.Yep。很抱歉我的回答有点粗心。不需要解决办法-事情正在进行,只是不需要解决办法!你必须把它包装成一个元组,否则类应该实现_散列_,他有在python中工作的代码,其中使用Octopus实例作为键-他尝试转换为TypeScript。因此:不需要解决方法。。。除非你提供一个TypeScript解决方案——因为他不能在TS@PatrickArtner问题是在Python中,对象可以用作字典中的键吗?而不是如何在TS中做到这一点。而且在python中不能使用任何对象作为键……看看这个问题。我有这样的代码。。然后是代码,使用实例作为dict中的键,然后是它,在我看来,好像章鱼对象被用作名为special_octopoda的字典中的键。Python中允许这样做吗?它当然不是在Typescript/Javascript中。他有使用python中对象实例的代码。。。此代码的类必须已经是可哈希的,代码才能工作。不需要任何变通办法。他对此感到困惑,因为他正在翻译TS,而这是不可能的。
class Octopus:
    def __hash__(self):
        # hash implementation