diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/ctypes/test/test_callbacks.py | 8 | ||||
-rw-r--r-- | Lib/dis.py | 4 | ||||
-rw-r--r-- | Lib/doctest.py | 4 | ||||
-rw-r--r-- | Lib/idlelib/CallTips.py | 6 | ||||
-rw-r--r-- | Lib/inspect.py | 13 | ||||
-rw-r--r-- | Lib/lib-tk/Tkinter.py | 2 | ||||
-rwxr-xr-x | Lib/pdb.py | 6 | ||||
-rwxr-xr-x | Lib/pydoc.py | 16 | ||||
-rw-r--r-- | Lib/test/crashers/borrowed_ref_2.py | 2 | ||||
-rw-r--r-- | Lib/test/test_descr.py | 31 | ||||
-rw-r--r-- | Lib/test/test_funcattrs.py | 41 | ||||
-rw-r--r-- | Lib/test/test_new.py | 4 | ||||
-rw-r--r-- | Lib/test/test_profilehooks.py | 2 | ||||
-rw-r--r-- | Lib/test/test_pyclbr.py | 2 |
14 files changed, 65 insertions, 76 deletions
diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py index d870eb424c..bf580ae8bd 100644 --- a/Lib/ctypes/test/test_callbacks.py +++ b/Lib/ctypes/test/test_callbacks.py @@ -14,7 +14,7 @@ class Callbacks(unittest.TestCase): return args[-1] def check_type(self, typ, arg): - PROTO = self.functype.im_func(typ, typ) + PROTO = self.functype.__func__(typ, typ) result = PROTO(self.callback)(arg) if typ == c_float: self.failUnlessAlmostEqual(result, arg, places=5) @@ -22,7 +22,7 @@ class Callbacks(unittest.TestCase): self.failUnlessEqual(self.got_args, (arg,)) self.failUnlessEqual(result, arg) - PROTO = self.functype.im_func(typ, c_byte, typ) + PROTO = self.functype.__func__(typ, c_byte, typ) result = PROTO(self.callback)(-3, arg) if typ == c_float: self.failUnlessAlmostEqual(result, arg, places=5) @@ -110,12 +110,12 @@ class Callbacks(unittest.TestCase): # functions, the type must have a non-NULL stgdict->setfunc. # POINTER(c_double), for example, is not supported. - prototype = self.functype.im_func(POINTER(c_double)) + prototype = self.functype.__func__(POINTER(c_double)) # The type is checked when the prototype is called self.assertRaises(TypeError, prototype, lambda: None) def test_unsupported_restype_2(self): - prototype = self.functype.im_func(object) + prototype = self.functype.__func__(object) self.assertRaises(TypeError, prototype, lambda: None) try: diff --git a/Lib/dis.py b/Lib/dis.py index 4cf452a097..6d52694a75 100644 --- a/Lib/dis.py +++ b/Lib/dis.py @@ -18,8 +18,8 @@ def dis(x=None): if x is None: distb() return - if hasattr(x, 'im_func'): - x = x.im_func + if hasattr(x, '__func__'): + x = x.__func__ if hasattr(x, '__code__'): x = x.__code__ if hasattr(x, '__dict__'): diff --git a/Lib/doctest.py b/Lib/doctest.py index 5b1807301a..f135027248 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -913,7 +913,7 @@ class DocTestFinder: if isinstance(val, staticmethod): val = getattr(obj, valname) if isinstance(val, classmethod): - val = getattr(obj, valname).im_func + val = getattr(obj, valname).__func__ # Recurse to methods, properties, and nested classes. if ((inspect.isfunction(val) or inspect.isclass(val) or @@ -985,7 +985,7 @@ class DocTestFinder: break # Find the line number for functions & methods. - if inspect.ismethod(obj): obj = obj.im_func + if inspect.ismethod(obj): obj = obj.__func__ if inspect.isfunction(obj): obj = obj.__code__ if inspect.istraceback(obj): obj = obj.tb_frame if inspect.isframe(obj): obj = obj.f_code diff --git a/Lib/idlelib/CallTips.py b/Lib/idlelib/CallTips.py index aee7e61287..cda2be979d 100644 --- a/Lib/idlelib/CallTips.py +++ b/Lib/idlelib/CallTips.py @@ -116,7 +116,7 @@ class CallTips: def _find_constructor(class_ob): "Find the nearest __init__() in the class tree." try: - return class_ob.__init__.im_func + return class_ob.__init__.__func__ except AttributeError: for base in class_ob.__bases__: init = _find_constructor(base) @@ -133,7 +133,7 @@ def get_argspec(ob): if fob is None: fob = lambda: None elif isinstance(ob, types.MethodType): - fob = ob.im_func + fob = ob.__func__ else: fob = ob if isinstance(fob, (types.FunctionType, types.LambdaType)): @@ -183,7 +183,7 @@ def main(): name = t.__name__ # exercise fetch_tip(), not just get_argspec() try: - qualified_name = "%s.%s" % (t.im_class.__name__, name) + qualified_name = "%s.%s" % (t.__self__.__class__.__name__, name) except AttributeError: qualified_name = name argspec = ct.fetch_tip(qualified_name) diff --git a/Lib/inspect.py b/Lib/inspect.py index 3a95796792..a1910e4ff9 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -55,9 +55,8 @@ def ismethod(object): Instance method objects provide these attributes: __doc__ documentation string __name__ name with which this method was defined - im_class class object in which this method belongs - im_func function object containing implementation of method - im_self instance to which this method is bound""" + __func__ function object containing implementation of method + __self__ instance to which this method is bound""" return isinstance(object, types.MethodType) def ismethoddescriptor(object): @@ -73,7 +72,7 @@ def ismethoddescriptor(object): Methods implemented via descriptors that also pass one of the other tests return false from the ismethoddescriptor() test, simply because the other tests promise more -- you can, e.g., count on having the - im_func attribute (etc) when an object passes ismethod().""" + __func__ attribute (etc) when an object passes ismethod().""" return (hasattr(object, "__get__") and not hasattr(object, "__set__") # else it's a data descriptor and not ismethod(object) # mutual exclusion @@ -351,7 +350,7 @@ def getfile(object): return object.__file__ raise TypeError('arg is a built-in class') if ismethod(object): - object = object.im_func + object = object.__func__ if isfunction(object): object = object.__code__ if istraceback(object): @@ -494,7 +493,7 @@ def findsource(object): raise IOError('could not find class definition') if ismethod(object): - object = object.im_func + object = object.__func__ if isfunction(object): object = object.__code__ if istraceback(object): @@ -744,7 +743,7 @@ def getfullargspec(func): """ if ismethod(func): - func = func.im_func + func = func.__func__ if not isfunction(func): raise TypeError('arg is not a Python function') args, varargs, kwonlyargs, varkw = _getfullargs(func.__code__) diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py index f40a55328e..aecb317efa 100644 --- a/Lib/lib-tk/Tkinter.py +++ b/Lib/lib-tk/Tkinter.py @@ -1081,7 +1081,7 @@ class Misc: f = CallWrapper(func, subst, self).__call__ name = repr(id(f)) try: - func = func.im_func + func = func.__func__ except AttributeError: pass try: diff --git a/Lib/pdb.py b/Lib/pdb.py index 3d79b4da1c..f5bdb205c8 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -345,8 +345,8 @@ class Pdb(bdb.Bdb, cmd.Cmd): except: func = arg try: - if hasattr(func, 'im_func'): - func = func.im_func + if hasattr(func, '__func__'): + func = func.__func__ code = func.__code__ #use co_name to identify the bkpt (function names #could be aliased, but co_name is invariant) @@ -789,7 +789,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): print('Function', code.co_name, file=self.stdout) return # Is it an instance method? - try: code = value.im_func.__code__ + try: code = value.__func__.__code__ except: pass if code: print('Method', code.co_name, file=self.stdout) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 3cffa065cf..51d627ea4d 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -848,17 +848,17 @@ class HTMLDoc(Doc): note = '' skipdocs = 0 if inspect.ismethod(object): - imclass = object.im_class + imclass = object.__self__.__class__ if cl: if imclass is not cl: note = ' from ' + self.classlink(imclass, mod) else: - if object.im_self is not None: + if object.__self__ is not None: note = ' method of %s instance' % self.classlink( - object.im_self.__class__, mod) + object.__self__.__class__, mod) else: note = ' unbound %s method' % self.classlink(imclass,mod) - object = object.im_func + object = object.__func__ if name == realname: title = '<a name="%s"><strong>%s</strong></a>' % (anchor, realname) @@ -1227,17 +1227,17 @@ class TextDoc(Doc): note = '' skipdocs = 0 if inspect.ismethod(object): - imclass = object.im_class + imclass = object.__self__.__class__ if cl: if imclass is not cl: note = ' from ' + classname(imclass, mod) else: - if object.im_self is not None: + if object.__self__ is not None: note = ' method of %s instance' % classname( - object.im_self.__class__, mod) + object.__self__.__class__, mod) else: note = ' unbound %s method' % classname(imclass,mod) - object = object.im_func + object = object.__func__ if name == realname: title = self.bold(realname) diff --git a/Lib/test/crashers/borrowed_ref_2.py b/Lib/test/crashers/borrowed_ref_2.py index f3ca35016d..6e403eb344 100644 --- a/Lib/test/crashers/borrowed_ref_2.py +++ b/Lib/test/crashers/borrowed_ref_2.py @@ -33,6 +33,6 @@ lst = [None] * 1000000 i = 0 del a while 1: - c.d = 42 # segfaults in PyMethod_New(im_func=D.__set__, im_self=d) + c.d = 42 # segfaults in PyMethod_New(__func__=D.__set__, __self__=d) lst[i] = c.g # consume the free list of instancemethod objects i += 1 diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index e093ce8edf..a518f16240 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -280,12 +280,12 @@ def test_dir(): c = C() vereq(interesting(dir(c)), cstuff) - #verify('im_self' in dir(C.Cmethod)) + #verify('__self__' in dir(C.Cmethod)) c.cdata = 2 c.cmethod = lambda self: 0 vereq(interesting(dir(c)), cstuff + ['cdata', 'cmethod']) - #verify('im_self' in dir(c.Cmethod)) + #verify('__self__' in dir(c.Cmethod)) class A(C): Adata = 1 @@ -293,13 +293,13 @@ def test_dir(): astuff = ['Adata', 'Amethod'] + cstuff vereq(interesting(dir(A)), astuff) - #verify('im_self' in dir(A.Amethod)) + #verify('__self__' in dir(A.Amethod)) a = A() vereq(interesting(dir(a)), astuff) a.adata = 42 a.amethod = lambda self: 3 vereq(interesting(dir(a)), astuff + ['adata', 'amethod']) - #verify('im_self' in dir(a.Amethod)) + #verify('__self__' in dir(a.Amethod)) # Try a module subclass. import sys @@ -1418,10 +1418,10 @@ def classmethods(): vereq(ff.__get__(0)(42), (int, 42)) # Test super() with classmethods (SF bug 535444) - veris(C.goo.im_self, C) - veris(D.goo.im_self, D) - veris(super(D,D).goo.im_self, D) - veris(super(D,d).goo.im_self, D) + veris(C.goo.__self__, C) + veris(D.goo.__self__, D) + veris(super(D,D).goo.__self__, D) + veris(super(D,d).goo.__self__, D) vereq(super(D,D).goo(), (D,)) vereq(super(D,d).goo(), (D,)) @@ -1507,7 +1507,7 @@ def classic(): r = repr(E().foo) verify(r.startswith("<bound method E.foo "), r) r = repr(C.foo.__get__(C())) - verify(r.startswith("<bound method ?.foo "), r) + verify(r.startswith("<bound method "), r) def compattr(): if verbose: print("Testing computed attributes...") @@ -1687,7 +1687,7 @@ def methods(): vereq(d2.goo(), 1) class E(object): foo = C.foo - vereq(E().foo.im_func, C.foo) # i.e., unbound + vereq(E().foo.__func__, C.foo) # i.e., unbound r = repr(C.foo.__get__(C(1))) verify(r.startswith("<bound method "), r) @@ -1864,17 +1864,6 @@ def recursions(): ## raise TestFailed, "expected a RuntimeError for print recursion" ## sys.stdout = test_stdout - # Bug #1202533. - class A(object): - pass - A.__mul__ = new.instancemethod(lambda self, x: self * x, None, A) - try: - A()*2 - except RuntimeError: - pass - else: - raise TestFailed("expected a RuntimeError") - def weakrefs(): if verbose: print("Testing weak references...") import weakref diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py index b9b2e6e556..3d0d4aa40e 100644 --- a/Lib/test/test_funcattrs.py +++ b/Lib/test/test_funcattrs.py @@ -104,11 +104,12 @@ else: raise TestFailed if f2.a.one != f1.a.one != F.a.one != 11: raise TestFailed -# im_func may not be a Python method! +# __func__ may not be a Python method! import new -F.id = new.instancemethod(id, None, F) +F.id = id eff = F() +eff.id = new.instancemethod(id, eff) if eff.id() != id(eff): raise TestFailed @@ -296,32 +297,32 @@ def test_func_dict(): verify(f.__dict__ == {'world': 'hello'}) cantset(f, "__dict__", None) -def test_im_class(): +def test___self__(): class C: def foo(self): pass - #verify(C.foo.im_class is C) - verify(C().foo.im_class is C) - #cantset(C.foo, "im_class", C) - cantset(C().foo, "im_class", C) + #verify(C.foo.__self__.__class__ is C) + verify(C().foo.__self__.__class__ is C) + #cantset(C.foo, "__self__.__class__", C) + cantset(C().foo, "__self__.__class__", C) -def test_im_func(): +def test___func__(): def foo(self): pass class C: pass C.foo = foo - #verify(C.foo.im_func is foo) - verify(C().foo.im_func is foo) - #cantset(C.foo, "im_func", foo) - cantset(C().foo, "im_func", foo) + #verify(C.foo.__func__ is foo) + verify(C().foo.__func__ is foo) + #cantset(C.foo, "__func__", foo) + cantset(C().foo, "__func__", foo) -def test_im_self(): +def test___self__(): class C: def foo(self): pass - #verify(C.foo.im_self is None) + #verify(C.foo.__self__ is None) c = C() - #verify(c.foo.im_self is c) - #cantset(C.foo, "im_self", None) - #cantset(c.foo, "im_self", c) + #verify(c.foo.__self__ is c) + #cantset(C.foo, "__self__", None) + #cantset(c.foo, "__self__", c) def test_im_dict(): class C: @@ -358,9 +359,9 @@ def testmore(): test_func_defaults() test_func_dict() # Tests for instance method attributes - test_im_class() - test_im_func() - test_im_self() + test___self__() + test___func__() + test___self__() test_im_dict() test_im_doc() test_im_name() diff --git a/Lib/test/test_new.py b/Lib/test/test_new.py index 797a8c349f..8e1d49db9e 100644 --- a/Lib/test/test_new.py +++ b/Lib/test/test_new.py @@ -25,7 +25,7 @@ class NewTest(unittest.TestCase): # new.instancemethod() c = C() c.yolks = 3 - im = new.instancemethod(break_yolks, c, C) + im = new.instancemethod(break_yolks, c) self.assertEqual(c.get_yolks(), 3, 'Broken call of hand-crafted class instance') @@ -43,7 +43,7 @@ class NewTest(unittest.TestCase): self.assertEqual(c.get_yolks(), -1) # Verify that dangerous instance method creation is forbidden - self.assertRaises(TypeError, new.instancemethod, break_yolks, None) + self.assertRaises(TypeError, new.instancemethod, None) # Verify that instancemethod() doesn't allow keyword args self.assertRaises(TypeError, new.instancemethod, break_yolks, c, kw=1) diff --git a/Lib/test/test_profilehooks.py b/Lib/test/test_profilehooks.py index 0f5616d0a7..3a17dc7390 100644 --- a/Lib/test/test_profilehooks.py +++ b/Lib/test/test_profilehooks.py @@ -31,7 +31,7 @@ class HookWatcher: def get_events(self): """Remove calls to add_event().""" - disallowed = [ident(self.add_event.im_func), ident(ident)] + disallowed = [ident(self.add_event.__func__), ident(ident)] self.frames = None return [item for item in self.events if item[2] not in disallowed] diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py index bcb79880d3..b88cb7e90b 100644 --- a/Lib/test/test_pyclbr.py +++ b/Lib/test/test_pyclbr.py @@ -67,7 +67,7 @@ class PyclbrTest(TestCase): if isinstance(obj, MethodType): # could be a classmethod if (not isinstance(classdict[name], ClassMethodType) or - obj.im_self is not oclass): + obj.__self__ is not oclass): return False elif not isinstance(obj, FunctionType): return False |