Магические методы на уроке самости

Я ищу способ вызывать магические методы на экземплярах классов. В моем случае я хочу вызвать хэш для класса на основе свойств. Я нашел решение с метаклассом, но я не могу получить доступ к свойствам класса из метода метакласса.

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))

Я нашел только эту тему: Определение магических методов на классах

1 ответ

Решение

Возьмите @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,

Другие вопросы по тегам