@Druss: правильно.

Рэнсом ответил наТАК вопрос о хешах здесь, в SO:

<, p> [...] Объект является хешируемым, если он имеет хеш-значениекоторый никогда не меняется в течение жизни, Таким образом, по официальному определению, все изменяемое не может быть хэшируемым, даже если оно имеет__hash__() функция. Мое утверждение о том, что оба требования являются необходимыми, не соответствует действительности, потому что хэшируемость уже подразумевает требование быть неизменным.

Я хочу убедиться, что я понял это правильно - даже если я не являюсь носителем языка - поэтому я надеюсь, что кто-то исправит меня, если я ошибаюсь.

Предполагая этот класс

class Author(object):
    def __init__(self, id, name, age):
        self.id = id
        self.name = name
        self.age = age

    def __eq__(self, other):
        return self.id==other.id\
               and self.name==other.name

    def __hash__(self):
        return hash(('id', self.id,
                     'name', self.name))

Я это понимаю__eq__ позволяет мне сравнивать объекты этого класса с== оператор. Из отметок ответа я понимаю, что даже если мой объектpeter = Author(1, "Peter", 33) имеет__hash__ это не хэшируемый, потому что я потенциально мог бы сделать что-то вродеpeter.age = 43 что означает, что это не является неизменным. Так что мои объекты классаAuthor не являются хэшируемыми и поэтому не могут использоваться как ключи в словарях, например? Я понял правильно или мне кажется, что мне нужно больше объяснений? :-)

Ответы на вопрос(1)

Ваш ответ на вопрос