Seite 1 von 1
Frage zu Startparametern
Verfasst: Sonntag 15. August 2010, 17:33
von .exe
Hallo,
ich habe mal ne Frage zu Parameterübergabe beim starten einer Python-Datei.Folgende Situation:
Python-Datei
Code: Alles auswählen
class TestClass():
def main(param):
print param
if param == '-s':
print "mach was"
if __name__ == '__main__':
TestClass().main()
Ich versuche einen Wert beim starten der Datei mit
python test.py -s ein parameter zu übergeben. Doch zu meiner Verwunderung ist
"param" =
<__main__.TestClass object at 0xb76aaacc>
Ich verstehe das nur nicht ;(. Mag mich da wer aufklären warum param nicht der Übergabewert ist
Gruß
Sic
Re: Frage zu Startparametern
Verfasst: Sonntag 15. August 2010, 17:46
von martin101986
Hallo,
diese Ausgabe ist schon korrekt. Jede Methode bekommt als ersten Parameter ein Objekt von sich selbst mit übergeben.
Dieses Objekt wird überlicherweise per Konvention "self" genannt. Du kannst mit diesem Objekt auf andere Methoden, Variablen der Klasse zugreifen.
Um an die Parameter zu kommen, welche beim Start einer py-Datei mitgegeben werden, musst du sys.argv verwenden:
Code: Alles auswählen
import sys
class TestClass(object):
def main(self):
if sys.argv[1:]:
print sys.argv[1]
sys.argv[0] ist der Name deines Skriptes.
Gruss
Martin
Re: Frage zu Startparametern
Verfasst: Sonntag 15. August 2010, 17:54
von .exe
Super dank dir vielmals für die Hilfe.
Das jede Methode ein Objekt von sich selbst übergibt wuste ich nicht.
Gruß
.exe
Re: Frage zu Startparametern
Verfasst: Sonntag 15. August 2010, 17:54
von Hyperion
Dieser Aufruf sieht aber imho auch sonderbar aus! Hier wird man das Gefühl nicht los, dass Du eine Klasse als Modul missbrauchst. Wozu brauchst Du an der Stelle ein ungebundenes Objekt einer Klasse?
Das pythonische Idiom wäre doch eher so:
Code: Alles auswählen
def main():
# hier dann der Einstieg in Funktionen usw.
if __name__ == '__main__':
main()
Eine Klasse mit .main()-Methode sieht für mich jedenfalls sonderbar aus...
Re: Frage zu Startparametern
Verfasst: Sonntag 15. August 2010, 17:55
von Darii
.exe hat geschrieben:Ich verstehe das nur nicht ;(. Mag mich da wer aufklären warum param nicht der Übergabewert ist
Warum sollte es so sein? Warum sollte gerade "-s" an die Methode übergeben werden? Du rufst sie ja völlig ohne Argument auf. Warum, in param das Objekt selbst gelandet ist, hat martin ja schon geschrieben.
Re: Frage zu Startparametern
Verfasst: Sonntag 15. August 2010, 18:55
von Dav1d
optparse bzw.
argparse (py>2.6)
Könnten noch interessant für dich sein.