[New-bugs-announce] [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 New-bugs-announce
mailing list