Issue #10193: Simplified instrospection used by turtle module

This commit is contained in:
Alexander Belopolsky 2010-10-27 13:25:45 +00:00
parent 7424dd359c
commit c1a6836305
1 changed files with 25 additions and 20 deletions

View File

@ -109,6 +109,7 @@ import types
import math import math
import time import time
import os import os
import inspect
from os.path import isfile, split, join from os.path import isfile, split, join
from copy import deepcopy from copy import deepcopy
@ -3889,31 +3890,35 @@ except:
def getmethparlist(ob): def getmethparlist(ob):
"Get strings describing the arguments for the given object" """Get strings describing the arguments for the given object
argText1 = argText2 = ""
Returns a pair of strings representing function parameter lists
including parenthesis. The first string is suitable for use in
function definition and the second is suitable for use in function
call. The "self" parameter is not included.
"""
defText = callText = ""
# bit of a hack for methods - turn it into a function # bit of a hack for methods - turn it into a function
# but we drop the "self" param. # but we drop the "self" param.
# Try and build one for Python defined functions # Try and build one for Python defined functions
argOffset = 1 args, varargs, varkw = inspect.getargs(ob.__code__)
counter = ob.__code__.co_argcount items2 = args[1:]
items2 = list(ob.__code__.co_varnames[argOffset:counter]) realArgs = args[1:]
realArgs = ob.__code__.co_varnames[argOffset:counter]
defaults = ob.__defaults__ or [] defaults = ob.__defaults__ or []
defaults = list(map(lambda name: "=%s" % repr(name), defaults)) defaults = ["=%r" % (value,) for value in defaults]
defaults = [""] * (len(realArgs)-len(defaults)) + defaults defaults = [""] * (len(realArgs)-len(defaults)) + defaults
items1 = list(map(lambda arg, dflt: arg+dflt, realArgs, defaults)) items1 = [arg + dflt for arg, dflt in zip(realArgs, defaults)]
if ob.__code__.co_flags & 0x4: if varargs is not None:
items1.append("*"+ob.__code__.co_varnames[counter]) items1.append("*" + varargs)
items2.append("*"+ob.__code__.co_varnames[counter]) items2.append("*" + varargs)
counter += 1 if varkw is not None:
if ob.__code__.co_flags & 0x8: items1.append("**" + varkw)
items1.append("**"+ob.__code__.co_varnames[counter]) items2.append("**" + varkw)
items2.append("**"+ob.__code__.co_varnames[counter]) defText = ", ".join(items1)
argText1 = ", ".join(items1) defText = "(%s)" % defText
argText1 = "(%s)" % argText1 callText = ", ".join(items2)
argText2 = ", ".join(items2) callText = "(%s)" % callText
argText2 = "(%s)" % argText2 return defText, callText
return argText1, argText2
def _turtle_docrevise(docstr): def _turtle_docrevise(docstr):
"""To reduce docstrings from RawTurtle class for functions """To reduce docstrings from RawTurtle class for functions