[Python-Dev] 'hasattr' is broken by design (original) (raw)
Benjamin Peterson benjamin at python.org
Tue Aug 24 02:04:16 CEST 2010
- Previous message: [Python-Dev] 'hasattr' is broken by design
- Next message: [Python-Dev] 'hasattr' is broken by design
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2010/8/23 Steven D'Aprano <steve at pearwood.info>:
On Tue, 24 Aug 2010 06:50:19 am Guido van Rossum wrote:
> * Is there anything that hasattr(obj, key) can or should do that > can't already be done with getattr(obj, key, None)? > If not, do we really need to change anything?
getattr(obj, 'key', None) returns None when obj.key exists and has the value None. The workaround is ugly. Why do you say it's ugly? It's a short, sweet, simple two-liner: mark = object() getattr(obj, 'key', mark) is not mark Nothing ugly about it at all. But if somebody really objected to using a two lines, they could put it in a utility function.
That's not all, though. You still have to test it with an "if" and that gets cumbersome after a while.
I have always thought that hasattr() does what it says on the box: it tests for the existence of an attribute, that is, one that statically exists rather than being dynamically generated. In other words, it is a key in the instance dict or is inherited from the class dict or that of a superclass, or a slot. Now that I know that hasattr doesn't do what I thought it does or what the name implies it does, it has little or no utility for me. In the future, I'll just write a try...except block and catch errors if the attribute doesn't exist.
Well, that's exactly what hasattr does...
-- Regards, Benjamin
- Previous message: [Python-Dev] 'hasattr' is broken by design
- Next message: [Python-Dev] 'hasattr' is broken by design
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]