2010/8/23 Raymond Hettinger <[email protected]>: > > On Aug 23, 2010, at 1:13 PM, Benjamin Peterson wrote: > >> 2010/8/23 Michael Foord <[email protected]>: >>> To me hasattr *looks* like a passive introspection function, and the fact >>> that it can trigger arbitrary code execution is unfortunate - especially >>> because a full workaround is pretty arcane.
hasattr(x, "y") doesn't look any more passive to me the x.y. > > Well said. The surprise to me in the OP's example was that > the property() was executed. Regular methods aren't run > by hasattr() so it's hard to remember that when writing code using hasattr(). Hard to remember compared to what? > > That is especially unfortunate because someone turning a regular > attribute into a property may be doing so long after client code has > been written (IIRC, that was a key use case for properties). > IOW, the user of the hasattr() may have had no way > of knowing that an exception could ever be raised > (because it is perfectly safe with regular attributes and methods). Better to raise an exception into unexpecting code that to have subtly different lookup rules between getattr and hasattr. -- Regards, Benjamin _______________________________________________ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
