Кажется, нет простого способа встроить строки документов в свойства классов cdef.При запуске обычного object.property?
или help(object.property)
в ipython он не показывает строку документации как введенную, а вместо этого показывает строку документации python для типа объекта, которому назначено свойство.Это с директивой embedsignature = True
вверху файла .pyx
.
Код, который я пишу, имеет много атрибутов, которые создают эту проблему, поэтому вот базовый формат, который написан до сих пор:
cdef class foo:
cdef object _attr
def __init__(self, attr = 0):
self._attr = attr
@property
def attr(self):
"""
The docstring that should be printed.
"""
return self._attr
@attr.setter
def attr(self, value):
self._attr = value
Я также попробовал следующееустарел синтаксис, который заявляет здесь , что строки документации могут быть написаны так.Несмотря на то, что это устарело, это, тем не менее, указывает на необходимость поддержки строк документации для свойств в cdef classes
cdef class foo:
cdef object _attr
def __init__(self, attr = 0):
self._attr = attr
property attr:
"""
The docstring that should be printed.
"""
def __get__(self):
return self._attr
def __set__(self, value):
self._attr = value
Если я запускаю bar = foo()
с последующим bar.attr?
или help(bar.attr)
в ipython, ожидаемая строка документа будет «Строка документа, которая должна быть напечатана».Однако вместо этого отображается «Преобразовать строку в число с плавающей запятой, если это возможно».который является питоном строки документа, дал тип float.
Я понимаю, что альтернативным решением этой проблемы было бы просто использовать питон class
вместо cdef class
, но реализуемый мной объект также обертывает объект typedef struct
в C
для которого я написал обширную библиотеку подпрограмм также в C
.Это исключает возможность простого переноса в python class
.
Есть ли простое решение этой проблемы?Если нет, я бы интерпретировал это как проблему с реализацией Cython;строки документации для пользовательских объектов довольно важны для Python.