On Tue, Aug 24, 2010 at 8:15 AM, Nick Coghlan <ncoghlan at gmail.com> wrote: > Now, it may be worth considering an addition to the inspect module > that was basically: > > def getattr_static(obj, attr): > """Retrieve attributes without triggering dynamic lookup via the > descriptor protocol, > __getattr__ or __getattribute__. > > Note: this function may not be able to retrieve all attributes > reported by dir(obj) > """ > try: > instance_dict = object.__getattribute__(obj, "__dict__") > except AttributeError: > pass > else: > if attr in instance_dict: > return instance_dict[attr] > for entry in getmro(obj.__class__): > try: > return entry.__dict__[attr] > except AttributeError: > pass Second attempt with a default value parameter and correctly raising AttributeError if not found: _sentinel = object() def getattr_static(obj, attr, default=_sentinel): """Retrieve attributes without triggering dynamic lookup via the descriptor protocol, __getattr__ or __getattribute__. Note: this function may not be able to retrieve all attributes reported by dir(obj) """ try: instance_dict = object.__getattribute__(obj, "__dict__") except AttributeError: pass else: if attr in instance_dict: return instance_dict[attr] for entry in getmro(obj.__class__): try: return entry.__dict__[attr] except AttributeError: pass if default is not _sentinel: return default raise AttributeError(attr) Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
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