class 自我的魔法方法

Magic methods on class self

我正在寻找一种在 class 实例上调用魔法方法的方法。就我而言,我想根据属性在 class 上调用散列。我找到了 metaclass 的解决方案,但我无法从 metaclass 的方法访问 class 属性。

class X(type):
    @classmethod
    def __hash__(cls):
        return hash(cls.x)
class Y(metaclass=X):
        x = (1, 2, 3)
assert hash(Y) == hash((1, 2, 3))

我只找到了这个帖子:

脱下@classmethod

class X(type):
    def __hash__(self):
        return hash(self.x)
class Y(metaclass=X):
        x = (1, 2, 3)
assert hash(Y) == hash((1, 2, 3))

您希望 __hash__ 接收 Y,它是 X 的一个实例。您不希望它接收 X.