[Python-ideas] Class introspection by pydoc vs. attributes on meta classes

Ronald Oussoren ronaldoussoren at mac.com
Sat Jul 25 13:47:06 CEST 2015


Pydoc (and AFAIK loads of other introspection tools as well) currently ignores attributes on metaclasses. I wonder if it would be better to teach pydoc (and possibly inspect as well) about those, and thought it would be better to ask here before starting on a patch.

That is, given the following definitions:

class Meta (type):
    def hidden_class(cls):
        print('H', cls.__name__)

class MyObject (metaclass=Meta):
    def public_class(cls):
        print('P', cls.__name__)

Pydoc will show “public_class” as a class method of “MyObject” when you use “help(MyObject)”, but it will not show that there is a method named “hidden_class” that can be called on “MyObject” (but not on instances of that class).  That is a problem when “hidden_class” is part of the public interface of the class itself.

The issue was found in the context of PyObjC (obviously…):  Objective-C classes can and do have instance and class methods of the same name. Those cannot both be a descriptor in the Python proxy class, and that’s why PyObjC uses an metaclass to expose Objective-C class methods to Python code. This works very well, except for some problems with introspection such as the pydoc issue I refer to above.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150725/49ec8da1/attachment.html>

More information about the Python-ideas mailing list