kostenloser Webspace werbefrei: lima-city


Python Anfängerfrage

lima-cityForumProgrammiersprachenPython

  1. Autor dieses Themas

    m****r

    Hallo,

    ich fange gerade an Python zu lernen. Was Klassen angeht, habe ich nun eine Frage.

    Ich habe Datei1 und Datei 2, in der ersten ist die Klasse

    class Test:
    def TestOutput(self):
    print("Hello World")

    hinterlegt. Diese möchte ich nun in Datei 2 nutzen. Also führe ich Datei 2 aus und binde sie über die Python Shell ein, indem ich import Datei 1 schreibe. Und dann? Unter Datei 1 kann ich nun das Modul ansprechen. Jetzt müsste ich ja nur über Datei1.Test.TestOutput() das ganze starten können. Geht aber nicht. TypeError: TestOutput() takes exactly 1 positional argument (0 given).

    Füge ich bei Datei1 noch Test = Test() hinzu funktioniert in der Python Shell der Aufruf Datei1.Test.TestOutput(). Wieso? Der einzige Unterschied ist, dass jetzt Datei1.Test ein Object und keine Klasse mehr ist. Versuche ich ohne die entsprechende Zeile in Datei1 die eingebundene Klasse zu instanzieren und das ganze dann zu starten, klappt es wieder nicht. Was mache ich falsch?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Man kann eine Klasse nicht aufrufen, was man aufrufen kann sind Methoden die auf Objekte (Instanzen einer Klasse) angewendet werden können.

    Um dein Problem jetzt korrekt zu verstehen und zu erklären benötigen wir deinen Quellcode der beiden Dateien und das was du zum importieren machst.
  4. Wie fatfox schon geschrieben hat, kannst du die Funktion nur für eine Instanz der Klasse Test aufrufen und nicht für die Klasse.
    Indem du Test = Test() schreibst erzeugst du eine Instanz der Klasse.
    Wenn du Test aufrufen können möchtest ohne eine Instanz der Klasse zu benötigen, dann brauchst du eine statische Funktion dafür.
    Die Fehlermeldung besagt übrigens, dass du zu wenige Parameter übergeben hast.
    In Python ist der erste Parameter einer Klassenfunktion die aufgerufene Instanz.
    Damit übergibst du ohne den Aufruf einer Instanz zu wenige Parameter.
    Es sollte also theoretisch auch möglich sein folgendes zu schreiben:
    Test.TestOutput(Test())
  5. Autor dieses Themas

    m****r

    Hallo,

    das ganze hat sich erledigt, ich hab es hinbekommen, bzw. jetzt verstanden. Allerdings habe ich nun eine weitere Frage:

    Wenn ich

    a = "Müller"
    print ("Hallo Herr a")


    habe (simples Beispiel), wie kann ich dann erreichen, dass anstatt dem "a" der Wert der Variablen also in dem Fall "Müller" genommen wird? Ich möchte nicht etwas wie

    print("Hallo Herr",a)


    es muss auch so klappen. Also ein Argument nur für die Funktion. Geht das?

  6. a = "Müller"
    print "Hallo Herr ",a


    Es geht natürlich über eine Konkatation auch noch komplexer:

    name = "Müller"
    konstanter_anteil = "Hallo Herr "
    gruss = konstanter_anteil + name
    print gruss


    Beitrag zuletzt geändert: 16.7.2010 18:40:55 von fatfox
  7. Autor dieses Themas

    m****r

    fatfox schrieb:
    a = "Müller"
    print "Hallo Herr ",a


    Es geht natürlich über eine Konkatation auch noch komplexer:

    name = "Müller"
    konstanter_anteil = "Hallo Herr "
    gruss = konstanter_anteil + name
    print gruss



    Genau das wollte ich ja nicht und habe extra gefragt, ob es da noch eine andere Möglichkeit gibt... Ich möchte NICHT, dass es mehrere Argumente für die Funktion print() gibt, sondern, dass ich das alles in dem einen Argument abhandeln kann. print("Hallo Herr a"). In PHP gibt es hierfür z.B. { und }, welche dann den Variablenwert nehmen.

    Gibt es da kein Äquivalent in Python?
  8. In Python gibt es wie in C Format Strings deren Beschreibung findet man per Suchmaschine wenn es das nicht ist dann versteh ich die Frage nicht.
  9. Autor dieses Themas

    m****r

    fatfox schrieb:
    In Python gibt es wie in C Format Strings deren Beschreibung findet man per Suchmaschine wenn es das nicht ist dann versteh ich die Frage nicht.


    Ah, genau soetwas habe ich gesucht. Danke. So funktioniert es:

    >>> a = "Müller"
    >>> "Hallo Herr {0}".format(a)
    'Hallo Herr Müller'


    (Ich benutze übrigens Python 3.1). Wenn ich das ganze nun versuche in mein Skript einzubauen, funktioniert es wiederum nicht:

    self.Output.Out(Hallo Herr {0}".format(a))


    Eine Erklärung: Ich benutze das ganze innerhalb einer Klasse. Das Klassenattribut Output ist die Instanz einer Output Klasse, die ich benötige, um Sachen auszugeben. Output.Out() sieht so aus:

    def Out(self,Text):
            print(Text)


    Ich weiß, das ist noch nichts anderes als print(), allerdings benötige ich das später, weil bei der Ausgabe nachher noch wesentlich mehr gemacht werden muss, weswegen ich das ganze jetzt schonmal in eine Funktion schreibe. Ich möchte also eigentlich nur, dass in meinem Beispiel über die Ausgabefunktion Output.Out() der Text Hallo Herr Müller ausgegeben wird, wobei "Müller" der Wert der Variablen a ist. Ich hoffe ich habe das gut beschrieben und ich hoffe ihr versteht jetzt warum ich a nicht einfach als zweiten Parameter anhängen will und kann: meine Out() Funktion hat nur diesen einen Parameter...

    Wieso funktioniert das ganze jetzt aber nicht? Ich habe doch haargenau den gleichen Code benutzt, bloß nun innerhalb der Out() Funktion...
  10. Also, wenn du deinen Code per Copy & Paste eingefügt hast, dann sollte es daran liegen, dass du die Anführungsstriche am anfang des Strings vergessen hast. Wenn das nicht das Problem ist, dann liefere bitte eine detaillierte Fehlerbeschreibung, also wie sich der Fehler äußert zb durch Fehlermeldungen des Interpreters.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!