From 52d80ca06c0d6730ddf35e0cba47472206766c2b Mon Sep 17 00:00:00 2001 From: David Halter Date: Fri, 3 Aug 2012 14:58:21 +0200 Subject: [PATCH] filtered base classes in builtins, this brings a huge speedup to builtin modules, which use inheritance excessively (e.g. PyQt4) --- builtin.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/builtin.py b/builtin.py index 0501e240..333511d6 100644 --- a/builtin.py +++ b/builtin.py @@ -187,6 +187,22 @@ class Parser(CachedModule): return doc return '' + def is_in_base_classes(cls, name, comparison): + """ Base classes may contain the exact same object """ + try: + mro = cls.mro() + except TypeError: + # this happens, if cls == type + return False + for base in mro[1:]: + try: + attr = getattr(base, name) + except AttributeError: + continue + if attr == comparison: + return True + return False + def get_types(names): classes = {} funcs = {} @@ -204,6 +220,9 @@ class Parser(CachedModule): # -> just set it to None members[n] = None else: + if inspect.isclass(scope): + if is_in_base_classes(scope, n, exe): + continue if inspect.isbuiltin(exe) \ or inspect.ismethoddescriptor(exe): funcs[n] = exe