2010/8/23 Michael Foord <fuzzyman at voidspace.org.uk>: > On 24/08/2010 00:40, Nick Coghlan wrote: >>> >>> Properties are allowed to do whatever the heck they want. That doesn't >>> mean >>> that you have to execute code to determine whether they exist or not. >> >> If you don't want to execute properties, do the lookup on the type, >> not the instance (obviously, you know the dance you need to do, since >> you've linked the code where you did it). Having apparently simple >> query operations like hasattr/getattr/len/etc execute arbitrary code >> is where much of the language's flexibility comes from, so I don't see >> how it can really be surprising when it happens. > > Certainly that is true for len. getattr obviously involves invoking code if > you are fetching a property or descriptor. No idea how you conclude that > hasattr executing code adds flexibility to the language though. > > Yes I know the dance (walking the mro fetching the attribute out of the > appropriate type __dict__ or the instance dict - or looking on the metaclass > if the object you are introspecting is a type itself), it is just not > trivial - which is why I think it is a shame that people are forced to > implement it just to ask if a member exists without triggering code > execution. Sounds like something for a new function. -- Regards, Benjamin
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4