diff -r b97557699db3 Lib/pydoc.py --- a/Lib/pydoc.py Tue Jun 17 00:34:14 2014 -0700 +++ b/Lib/pydoc.py Tue Jun 17 19:58:02 2014 +0200 @@ -180,6 +180,9 @@ name, kind, cls, value = data if inspect.isdatadescriptor(value): kind = 'data descriptor' + if kind == "data" and cls == None: + # a class attribute defined in the metaclass + cls = object.__class__ return name, kind, cls, value return map(fixup, inspect.classify_class_attrs(object)) @@ -1259,6 +1262,14 @@ continue elif thisclass is object: tag = "defined here" + elif isinstance(thisclass, type): + # The class is a metaclass. + # Note: This test for metaclass probably does not cover all + # possibilities. For example, Python documents that + # classes can specify their metaclass as a callable + # that is not a class. + tag = "propagated from metaclass %s" % classname(thisclass, + object.__module__) else: tag = "inherited from %s" % classname(thisclass, object.__module__)