readonly __slots__, Docstrings für __slots__

10/09/2007 - 11:38 von asbach | Report spam
Hallo zusammen,

ich bin endlich mit einigen Klassen auf new-style classes umgestiegen,
habe aber noch erhebliche Probleme (mangels Dokumentation) mit einigen
Features.

1) Kann ich einzelne Instanzvariablen (bzw. gleich __slots__-Eintràge)
zu readonly Attributen machen? Natürlich kann ich eine Funktion
schreiben, die die entsprechende Variable zurückgibt und dann mittels
property () das schreiben verhindern - aber geht es noch irgendwie
direkter?

2) Mit __slots__ kann ich endlich dafür sorgen, dass Instanzvariablen
auch in der pydoc Dokumentation auftauchen. Nur kann ich sie nicht mit
einem Docstring versehen. Zu diesem Thema habe ich nach einiger
Recherche nur den folgenden Thread gefunden:

http://mail.python.org/pipermail/py...44213.html

Weitere Infos zum Thema wàren sehr hilfreich. Ach so, ich arbeite
vorwiegend mit Python 2.4.4, ggf. steht in einigen Monaten der Umzug
nach 2.5 an, aber ich würde gerne möglichst viel rückwàrtskompatibel
halten ...

Gruß und Dank, Mark

Dipl.-Ing. Mark Asbach Tel +49 (0)241-80-27677
Institut für Nachrichtentechnik Fax +49 (0)241-80-22196
Melatener Straße 23 asbach@ient.rwth-aachen.de
D-52072 Aachen http://www.ient.rwth-aachen.de
 

Lesen sie die antworten

#1 Marc BlackJack Rintsch
10/09/2007 - 13:39 | Warnen spam
On Mon, 10 Sep 2007 11:38:33 +0200, Mark Asbach wrote:

1) Kann ich einzelne Instanzvariablen (bzw. gleich __slots__-Eintràge)
zu readonly Attributen machen? Natürlich kann ich eine Funktion
schreiben, die die entsprechende Variable zurückgibt und dann mittels
property () das schreiben verhindern - aber geht es noch irgendwie
direkter?



Nicht das ich wüsste. Ich würde es generell auch nicht empfehlen. Sei
einfach ein wenig entspannter, dokumentiere dass ein Attribut nur gelesen
werden sollte und vertrau auf den Programmierer, der den Code benutzt.

2) Mit __slots__ kann ich endlich dafür sorgen, dass Instanzvariablen
auch in der pydoc Dokumentation auftauchen.



Das ist ja ein noch schlimmerer Missbrauch als `__slots__` dazu
zu verwenden, um zu verhindern das dynamisch Attribute auf einem Objekt
hinzugefügt werden. `__slots__` ist ein Mechanismus um Speicherplatz zu
sparen wenn man *sehr* viele Objekte von dem Typ erwartet. Und zwar mehr
als ein paar Tausend.

Wenn Du Attribute dokumentiert haben willst, dann schreib einfach die
Dokumentation dazu. Klassen- und Instanzattribute werden normalerweise im
Docstring der Klasse beschrieben.

Nur kann ich sie nicht mit einem Docstring versehen.



Der Docstring "hàngt" am Objekt und nicht am Namen. Wie gesagt, es ist
üblich diese Attribute bei der Klasse zu dokumentieren.

Ciao,
Marc 'BlackJack' Rintsch

Ähnliche fragen