[Python-bugs-list] [ python-Bugs-718532 ] inspect, class instances and __getattr__
SourceForge.net
noreply@sourceforge.net
Mon, 14 Apr 2003 17:36:07 -0700
Bugs item #718532, was opened at 2003-04-09 15:01
Message generated for change (Comment added) made by rhettinger
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=718532&group_id=5470
Category: Python Library
Group: Python 2.2.2
Status: Open
Resolution: None
Priority: 5
Submitted By: Stefan Schwarzer (sschwarzer)
Assigned to: Nobody/Anonymous (nobody)
Summary: inspect, class instances and __getattr__
Initial Comment:
inspect.isclass(class_instance) fails if the
corresponding class uses a "wildcard" implementation of
__getattr__.
Example:
Python 2.2.2 (#1, Nov 13 2002, 22:53:57)
[GCC 2.95.4 20020320 [FreeBSD]] on freebsd4
Type "help", "copyright", "credits" or "license" for
more information.
>>> import inspect
>>> class X:
... def __getattr__(self, name):
... if name == 'foo':
... return 1
... if name == 'bar':
... return 2
... else:
... return "default"
...
>>> x = X()
>>> inspect.isclass(x)
1
The problematic expression in inspect.isclass is
hasattr(object, '__bases__') which returns a true value.
----------------------------------------------------------------------
>Comment By: Raymond Hettinger (rhettinger)
Date: 2003-04-14 19:36
Message:
Logged In: YES
user_id=80475
Hmm. I'm not sure that counts as a bug. In an OO
language, it's a feature that objects can be made to look
like and be substituable for other types. In this case,
you've taught your object to be able to fake some classlike
behavior (having a __bases__ attribute).
OTOH, inspect could have a stronger test for classhood:
type(object) in (types.TypeType, types.ClassType)
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=718532&group_id=5470