Seite 1 von 1

dir()

Verfasst: Freitag 10. Juni 2005, 14:21
von mitsuhiko
Hi,
Was gibt eingentlich dir aus?
Ist es so wie len(o) eigentlich nur o.__len__ oder steht da mehr dahinter?
Wenn nein, könnte man nicht die Variable dahingehen beeinflussen. dass beim import nur bestimmte Bereiche exportiert werden?

Verfasst: Freitag 10. Juni 2005, 14:39
von CM
Hoi,

siehe Docs.

Dir gibt also alle Methoden eines Moduls aus (bei dir(modul)) und ggf. noch builtin-Methoden, auf die das Modul zugreifen kann.
Nach dem Import eines Moduls kannst Du kein modul.__dir__() machen - es sei denn natürlich irgendjemand hat eine solche Methode für sein Modul definiert. Aber es ist jedenfalls nicht builtin.
Wenn nein, könnte man nicht die Variable dahingehen beeinflussen. dass beim import nur bestimmte Bereiche exportiert werden?
Was meinst Du damit?

Gruß,
Christian

Verfasst: Freitag 10. Juni 2005, 14:42
von Erwin
Ohne Argument liefert er Dir eine Liste der aktuellen Namen des lokalen Namensraumes.

Wenn ein Objekt angegeben wird, liefert er Dir dann eine Liste aller Attribute und Methoden des Objekts.

Im interaktiven Modus (Idle) kann man sich damit einen Überblick über die Funktionen verschaffen, die ein Modul bereit stellt.

Verfasst: Freitag 10. Juni 2005, 20:25
von mitsuhiko
Ich weiß jawohl, was dir() macht.
ich dachte nur, dass ein import gtk einfach alle methoden in einen Namensraum läd, die in einer bestimmten Liste sind (der Liste, die dir ausgibt).
Ich dachte, ob man diese Variable beinflussen könnte, dass ein import bestimmte bereiche übergeht, sowas wie private.

Verfasst: Freitag 10. Juni 2005, 20:40
von Leonidas
Erwin hat geschrieben:Im interaktiven Modus (Idle) kann man sich damit einen Überblick über die Funktionen verschaffen, die ein Modul bereit stellt.
Den interaktiven Modus gibt es übrigens nicht in IDLE sondern in Python selbst, mit anderen Worten, dazu brauchst du kein IDLE. Oder du besorgst die IPython, dann hast du einen richtig tollen Interaktiven Modus mit vielen Features.
blackbird hat geschrieben:Ich weiß jawohl, was dir() macht.
ich dachte nur, dass ein import gtk einfach alle methoden in einen Namensraum läd, die in einer bestimmten Liste sind (der Liste, die dir ausgibt).
Ich dachte, ob man diese Variable beinflussen könnte, dass ein import bestimmte bereiche übergeht, sowas wie private.
Hmm, ich denke dir() liest einfach die globals eines Moduls aus. Bei einem import wird afaik dir() nicht benutzt, Python geht beim Importieren die Datei durch erstellt daraus die Modul-globals und ist fertig. Mit dir() werden halt einfach die Namen der globals ausgegeben, also hat dir() nur informative Funktion und wird nicht intern von Python verwendet.

Aber warum willst du denn etwas unbedingt private machen? Dazu reicht es meist einen Namen mit einem oder zwei _ zu markieren, wenn die Programmierer das trotzdem nutzen sind sie selbst schuld wenn irgendwann etwas nicht mehr geht.