Author: Benjamin Peterson <[email protected]>
Branch:
Changeset: r44390:c51441e3cfea
Date: 2011-05-23 17:58 -0500
http://bitbucket.org/pypy/pypy/changeset/c51441e3cfea/
Log: fix __dir__ on old-style classes
diff --git a/pypy/module/__builtin__/app_inspect.py
b/pypy/module/__builtin__/app_inspect.py
--- a/pypy/module/__builtin__/app_inspect.py
+++ b/pypy/module/__builtin__/app_inspect.py
@@ -64,7 +64,14 @@
obj = args[0]
- dir_meth = lookup_special(obj, "__dir__")
+ dir_meth = None
+ if isinstance(obj, types.InstanceType):
+ try:
+ dir_meth = getattr(obj, "__dir__")
+ except AttributeError:
+ pass
+ else:
+ dir_meth = lookup_special(obj, "__dir__")
if dir_meth is not None:
result = dir_meth()
if not isinstance(result, list):
diff --git a/pypy/module/__builtin__/test/test_builtin.py
b/pypy/module/__builtin__/test/test_builtin.py
--- a/pypy/module/__builtin__/test/test_builtin.py
+++ b/pypy/module/__builtin__/test/test_builtin.py
@@ -123,7 +123,10 @@
return [1, 3, 2]
f = Foo()
assert dir(f) == [1, 2, 3]
- #
+ class Foo:
+ def __dir__(self):
+ return ["apple"]
+ assert dir(Foo()) == ["apple"]
class Foo(object):
def __dir__(self):
return 42
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit