[issue22656] `help` ignores `__doc__` of descriptors

Ram Rachum report at bugs.python.org
Fri Oct 17 15:15:04 CEST 2014


New submission from Ram Rachum:

The builtin `property` lets you specify a `doc` argument for your properties, which is great because then it shows up in `help`. So I figured that when I'm writing my own descriptor, I could set `__doc__` on it and have `help` use it. Not so, `help` ignores it. 

See this example:

    class Property(object):
        "Emulate PyProperty_Type() in Objects/descrobject.c"
    
        def __init__(self, fget=None, fset=None, fdel=None, doc=None):
            self.fget = fget
            self.fset = fset
            self.fdel = fdel
            if doc is None and fget is not None:
                doc = fget.__doc__
            self.__doc__ = doc
    
        def __get__(self, obj, objtype=None):
            if obj is None:
                return self
            if self.fget is None:
                raise AttributeError("unreadable attribute")
            return self.fget(obj)
    
        def __set__(self, obj, value):
            if self.fset is None:
                raise AttributeError("can't set attribute")
            self.fset(obj, value)
    
        def __delete__(self, obj):
            if self.fdel is None:
                raise AttributeError("can't delete attribute")
            self.fdel(obj)
    
        def getter(self, fget):
            return type(self)(fget, self.fset, self.fdel, self.__doc__)
    
        def setter(self, fset):
            return type(self)(self.fget, fset, self.fdel, self.__doc__)
    
        def deleter(self, fdel):
            return type(self)(self.fget, self.fset, fdel, self.__doc__)
    
    
    class A:
        x = property(lambda self: 3,
                     doc='Helpful text')
        
        y = Property(lambda self: 7,
                     doc='More Helpful text')
        
    
    help(A.x) # Shows 'Helpful text'
    help(A.y) # Does not show 'More Helpful text'
    

It seems that `property` is special-cased or something. I want to be able to set a docstring on my own descriptors.

----------
components: Library (Lib)
messages: 229572
nosy: cool-RR
priority: normal
severity: normal
status: open
title: `help` ignores `__doc__` of descriptors
versions: Python 3.4

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue22656>
_______________________________________


More information about the Python-bugs-list mailing list