Is there a consensus on how to check a polymorphic instance?

Steven Bethard steven.bethard at gmail.com
Tue Nov 23 01:31:16 EST 2004


Mike Meng wrote:
> 1. In `Text Processing in Python', David Mertz suggests using `hasattr'
> to check abilities instead of type checking.

hasattr can give you problems if the attribute you're checking for is 
calculated on the fly since hasattr basically does the same thing 
getattr does:

 >>> class C(object):
...     def time():
...         def fget(self):
...             time.sleep(5)
...             return time.time()
...         return dict(fget=fget)
...     time = property(**time())
...
 >>> c = C()
 >>> hasattr(c, 'time')
True
 >>> c.time
1101191279.3729999

If you run the code above, you'll get the 5 second pause both during the 
hasattr call and the c.time access.  If any object you use calculates 
attribute values on the fly, calling hasattr before directly accessing 
the attribute will cause the value to be calculated twice.

Steve



More information about the Python-list mailing list