homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Odd code fragment in ABC definitions
Type: Stage:
Components: Versions: Python 3.0, Python 2.6
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: gvanrossum Nosy List: amaury.forgeotdarc, gvanrossum, rhettinger
Priority: normal Keywords:

Created on 2008年07月02日 23:06 by rhettinger, last changed 2022年04月11日 14:56 by admin. This issue is now closed.

Messages (4)
msg69140 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2008年07月02日 23:06
In the Hashable ABC, there is a peculiar code fragment:
 if "__hash__" in B.__dict__:
 if B.__dict__["__hash__"]:
 return True
 break
When would the innermost if-statement ever be False? Is there a reason 
to define __hash__ to be something that evaluates to False?
msg69143 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2008年07月02日 23:10
This is precisely under discussion in issue2235:
if a base class is hashable, a derived class may set __hash__ to None,
and disallow hashing.
msg69145 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2008年07月02日 23:24
I don't think we should build in explicit support for bad designs that 
violate the Liskov substitution principle. Are there any valid use 
cases for wanting non-hashable subclasses of hashable classes?
If for some reason, this feature survives, it would be better to use 
NotImplemented instead of None.
msg69147 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2008年07月02日 23:32
There are tons of ways to violate Liskov in Python. Liskov is not always
the right rule.
NotImplemented is not appropriate -- it is only used as a magic return
value from binary functions.
History
Date User Action Args
2022年04月11日 14:56:36adminsetgithub: 47513
2008年07月02日 23:32:18gvanrossumsetstatus: open -> closed
resolution: rejected
messages: + msg69147
2008年07月02日 23:24:04rhettingersetmessages: + msg69145
versions: + Python 2.6, - Python 2.5
2008年07月02日 23:10:36amaury.forgeotdarcsetnosy: + amaury.forgeotdarc
messages: + msg69143
2008年07月02日 23:06:53rhettingercreate

AltStyle によって変換されたページ (->オリジナル) /