summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2011-06-20 00:42:22 (GMT)
committerBenjamin Peterson <benjamin@python.org>2011-06-20 00:42:22 (GMT)
commitf5ff22329b3a4838054dfadfad74fc5a0519cbb2 (patch)
treecbf644106089a69d028c954e246dab129b3d02cd /Lib
parent019d0f27a3fc8d4daa7caea8c041cd26d5873950 (diff)
downloadcpython-f5ff22329b3a4838054dfadfad74fc5a0519cbb2.zip
cpython-f5ff22329b3a4838054dfadfad74fc5a0519cbb2.tar.gz
cpython-f5ff22329b3a4838054dfadfad74fc5a0519cbb2.tar.bz2
use a invalid name for the __class__ closure for super() (closes #12370)
This prevents the assignment of __class__ in the class body from breaking super. (Although a determined person could do locals()["@__class__"] = 4)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_super.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/Lib/test/test_super.py b/Lib/test/test_super.py
index 914216d..298cae0 100644
--- a/Lib/test/test_super.py
+++ b/Lib/test/test_super.py
@@ -81,6 +81,16 @@ class TestSuper(unittest.TestCase):
self.assertEqual(E().f(), 'AE')
+ def test___class___set(self):
+ # See issue #12370
+ class X(A):
+ def f(self):
+ return super().f()
+ __class__ = 413
+ x = X()
+ self.assertEqual(x.f(), 'A')
+ self.assertEqual(x.__class__, 413)
+
def test_main():
support.run_unittest(TestSuper)