Dynamische Docstrings

29/09/2010 - 09:19 von Ole Streicher | Report spam
Hallo Gruppe,

ich habe eine Klasse, die recht komplexe Objekte (aus einer shared
library) erzeugt. Diese Objekte hàtte ich gerne (im interaktiven Modus)
dokumentiert.

Derzeit mache ich das so:

8<--
class MyObject(object):
'''Pluggable Object ...'''

def __init__(self, name, filename, ...):
'''Load the object from a shlib.
:param name: Name of the object...
:param filename: Name of the shared library file ...
'''
...
def _get_description_from_shlib(self):
return 'something that is retrieved from the shared lib'

__doc__ = property(_get_description_from_shlib)

...
8<--

Das funktioniert leider nicht richtig: Wenn man in ipython

MyObject?

tippt, erhàlt man zwar den Docstring von __init__, aber der Docstring
der ganzen Klasse ist weg. Bei

myfirst = MyObject('first', 'somelib.so')
myfirst?

bekomme ich zwar den richtigen Docstring für myfirst aus der shared lib,
aber auch den Docstring für __init__(), der an dieser Stelle vollkommen
unsinnig ist (weil das Objekt ja schon erzeugt wurde), und der auch
leider etwas lànglich ist (weil die Initialisierung eine ganze Reige
Optionen hat).

Wie bekomme ich alles zusammen? Also sowohl die korrekte statische
Dokumentation der Klasse als auch eine übersichtliche Dokumentation des
erzeugten Objekts?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Peter Otten
29/09/2010 - 14:07 | Warnen spam
Ole Streicher wrote:

ich habe eine Klasse, die recht komplexe Objekte (aus einer shared
library) erzeugt. Diese Objekte hàtte ich gerne (im interaktiven Modus)
dokumentiert.

Derzeit mache ich das so:

8<--
class MyObject(object):
'''Pluggable Object ...'''

def __init__(self, name, filename, ...):
'''Load the object from a shlib.
:param name: Name of the object...
:param filename: Name of the shared library file ...
'''
...
def _get_description_from_shlib(self):
return 'something that is retrieved from the shared lib'

__doc__ = property(_get_description_from_shlib)

...
8<--

Das funktioniert leider nicht richtig: Wenn man in ipython

MyObject?

tippt, erhàlt man zwar den Docstring von __init__, aber der Docstring
der ganzen Klasse ist weg. Bei

myfirst = MyObject('first', 'somelib.so')
myfirst?

bekomme ich zwar den richtigen Docstring für myfirst aus der shared lib,
aber auch den Docstring für __init__(), der an dieser Stelle vollkommen
unsinnig ist (weil das Objekt ja schon erzeugt wurde), und der auch
leider etwas lànglich ist (weil die Initialisierung eine ganze Reige
Optionen hat).

Wie bekomme ich alles zusammen? Also sowohl die korrekte statische
Dokumentation der Klasse als auch eine übersichtliche Dokumentation des
erzeugten Objekts?



Du könntest es natürlich forcieren

class A(object):
"class A..."
def __init__(self):
"A.__init__()..."
self.__class__ = type(
"A*", (A,),
dict(__doc__="A instance...", __init__=None))

aber irgendwie vermitteln deine Postings hier den Eindruck, dass dein Code
bereits jetzt das Kompliziertheitsmaximum im bekannten Python-Universum
darstellt...

Peter

Ähnliche fragen