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

Code: Alles auswählen

if __name__ == '__main__':
    TestClass().main()
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.