xplicação necessária em relação à explicação de objetos hashab
Mark Ransom respondeu em umSO pergunta sobre hashes aqui no SO:
<, p> [...] Um objeto é lavável se tiver um valor de hashque nunca muda durante sua vida útil. Portanto, pela definição oficial, qualquer coisa mutável não pode ser lavável, mesmo que tenha um__hash__()
função. Minha declaração sobre a necessidade de ambos os requisitos é falsa, porque ser lavável já implica a exigência de ser imutáveEu quero ter certeza de que eu entendi direito - mesmo que não seja um falante nativo -, então espero que alguém me corrija se eu entendi errad
Assumindo esta aula
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))
Eu entendi aquilo__eq__
permite comparar objetos dessa classe com o==
operador. De Marks respondo, eu entendo que, mesmo que meu objetopeter = Author(1, "Peter", 33)
tem um__hash__
não é lavável, porque eu poderia fazer algo comopeter.age = 43
, o que significa que não é imutável. Então, meus objetos da classeAuthor
não são laváveis e, portanto, não podem ser usadas como chaves em dicionários, por exemplo? Eu acertei ou parece que preciso de mais explicações? : -)