python 类设置可变不可变?

我在定义类的时候,出现了问题,类似这样:
class Person:
...... # 定义了name
def __eq__(self, other):
return self.name == other.name

_dict = {Person(): None}
报错说类是可变的,我知道是因为加了__eq__,但我确实想要重载==,能不能即加__eq__又是不可变的呢

在Python中,如果您希望类的实例是不可变的,同时又要重载__eq__方法,您可以通过以下方式实现:

    使用__hash__方法: 为了让类的实例成为不可变的,您需要实现__hash__方法并确保它返回一个固定的哈希值。这将告诉Python,类的实例是不可变的,可以被用作字典的键。

    使用__slots__属性: 使用__slots__属性可以限制类的实例只能包含特定的属性,这也有助于使实例不可变。但请注意,这会限制您的类只能包含预定义的属性。

    下面是一个示例,演示如何同时重载__eq__方法并使类的实例不可变:

在上面的示例中,__slots__属性限制了Person类的实例只能包含name属性,而__hash__方法为实例提供了一个基于name属性的哈希值,使其可以被用作字典的键,同时重载了__eq__方法来定义实例的相等性。这样,您就可以实现既可以重载__eq__方法又可以让类的实例不可变的目标。

温馨提示:答案为网友推荐,仅供参考