[pypy-svn] r49625 - in pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Dec 11 13:09:27 CET 2007
Author: cfbolz
Date: Tue Dec 11 13:09:27 2007
New Revision: 49625
Modified:
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
Log:
this actually needs to be a __getattribute__, not a __getattr__
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py Tue Dec 11 13:09:27 2007
@@ -95,7 +95,19 @@
return w_result
return None
- def descr_getattr(self, space, w_attr):
+ def descr_getattribute(self, space, w_attr):
+ try:
+ name = space.str_w(w_attr)
+ except OperationError, e:
+ if not e.match(space, space.w_TypeError):
+ raise
+ else:
+ if name == "__dict__":
+ return self.w_dict
+ elif name == "__name__":
+ return self.w_name
+ elif name == "__bases__":
+ return self.w_bases
w_value = self.lookup(space, w_attr)
if w_value is None:
raise OperationError(
@@ -133,7 +145,7 @@
W_ClassObject.fset_bases),
__call__ = interp2app(W_ClassObject.descr_call,
unwrap_spec=['self', ObjSpace, Arguments]),
- __getattr__ = interp2app(W_ClassObject.descr_getattr,
+ __getattribute__ = interp2app(W_ClassObject.descr_getattribute,
unwrap_spec=['self', ObjSpace, W_Root]),
)
W_ClassObject.typedef.acceptable_as_base_class = False
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py Tue Dec 11 13:09:27 2007
@@ -82,3 +82,16 @@
assert B.af(b) == 3
assert B.bf(b) == 2
assert B.cf(b) == 4
+
+ def test_inheritance_unbound_method(self):
+ class A:
+ __metaclass__ = nclassobj
+ def f(self):
+ return 1
+ raises(TypeError, A.f, 1)
+ assert A.f(A()) == 1
+ class B(A):
+ pass
+ raises(TypeError, B.f, 1)
+ raises(TypeError, B.f, A())
+ assert B.f(B()) == 1
More information about the Pypy-commit
mailing list