Seite 1 von 1
Basis Frage zu Klassen und Methoden (Funktionen
Verfasst: Sonntag 9. Dezember 2007, 13:24
von debian75
Wie kann ich die verschiedenen Funktionen einer Klasse untereinander aufrufen ?
Code: Alles auswählen
class A():
def x():
print "hello"
def y():
print "world"
def z():
x()
also ich will in der funktionz die funktion x aufrufen. ich bekomme die meldung:
global name 'x' is not defined
Verfasst: Sonntag 9. Dezember 2007, 13:33
von Rebecca
Bei Instanzmethoden ueber self.x(). Wobei wir auch schon zu einem weiteren Fehler deines Codes kommen: Instanzmethoden bekommen die Instanz selbst automatisch als ersten Parameter uebergeben, den man ueblicherweise self nennt.
Code: Alles auswählen
class A():
def x(self):
print "hello"
def y(self):
print "world"
def z(self):
self.x()
Verfasst: Sonntag 9. Dezember 2007, 13:48
von Leonidas
Warum müssen wir dir das Tutorial vorlesen? Lies es doch einfach selbst, da steht doch alles drin...
Verfasst: Sonntag 9. Dezember 2007, 14:12
von debian75
naja, ich denke es ist schneller hier was zu fragen als sich durch die ganzen verstreuten und verschiedensprachigen tutorials zu wühlen....besonders wenn man nicht genau weiss wonach man suchen soll.
beispiel ist mein aktuelles problem:
ich hab ne liste mit funktionsnamen und möchte die funktionen der reihe nach aufrufen:
Code: Alles auswählen
functions=['alpha', 'beta', 'gamme']
for f in functions:
self.f
das geht aber nicht , weil er f als string interpretiert
in welchem tutorial soll ich nun die antwort suchen ?
EDIT: es tut mir leid wenn ich hier dumme fragen stelle aber ich dachte das "Allgemein" ist für sowas da ?
Verfasst: Sonntag 9. Dezember 2007, 14:18
von nemomuk
ich bin auch kein Python-Genie, aber geht das nicht so:
Code: Alles auswählen
class Asd():
a(),b(),c()
def a(self):
print 123
def b(self):
print "asddsfg"
def c(self):
print "asddsfg"
////Bitte um Korrektur, falls falsch...
Verfasst: Sonntag 9. Dezember 2007, 14:37
von BlackJack
@SchneiderWeisse: Nein so geht das nicht. Und das hättest Du auch ganz schnell vorher ausprobieren können. Korrektur kann ich nicht liefern, weil mir nicht klar ist, was das machen soll.
@debian75: Kannst Du nicht einfach die Funktionen in die Liste stecken, statt der Namen als Zeichenketten? Ansonsten schau Dir die Doku zu `getattr()` an, wenn der Umweg über Zeichenketten unbedingt sein muss.
Verfasst: Sonntag 9. Dezember 2007, 14:47
von debian75
BlackJack hat geschrieben:@SchneiderWeisse: Nein so geht das nicht. Und das hättest Du auch ganz schnell vorher ausprobieren können. Korrektur kann ich nicht liefern, weil mir nicht klar ist, was das machen soll.
@debian75: Kannst Du nicht einfach die Funktionen in die Liste stecken, statt der Namen als Zeichenketten? Ansonsten schau Dir die Doku zu `getattr()` an, wenn der Umweg über Zeichenketten unbedingt sein muss.
ich habs jetzt so gemacht:
Code: Alles auswählen
liste = [self.A self.B, self.C, self.D]
for li in liste:
li
besser gefallen würde mir allerdings:
wie von dir vorgeschlagen, aber das frisst er wieder nicht von wegen global name A not defined.
Verfasst: Sonntag 9. Dezember 2007, 15:06
von BlackJack
Ich habe vorgeschlagen die Funktionen in die Liste zu stecken. Also `self.A`, `self.B`, usw. in Deinem Fall. Wenn die Funktionen/Methoden Attribute des Objekts sind, muss man sie halt auch entsprechend referenzieren.
Verfasst: Sonntag 9. Dezember 2007, 15:50
von veers
debian75 hat geschrieben:naja, ich denke es ist schneller hier was zu fragen als sich durch die ganzen verstreuten und verschiedensprachigen tutorials zu wühlen....besonders wenn man nicht genau weiss wonach man suchen soll.
http://docs.python.org/tut/tut.html arbeite einfach das eine Tutorial durch.
Verfasst: Sonntag 9. Dezember 2007, 16:01
von Hobbes Hobson
Ich weiß nicht, ob das damit gemeint ist, aber vielleicht hilft es:
Code: Alles auswählen
#!/usr/bin/env python
def a():
print 'a'
def b():
print 'b'
for i in [a,b]:
i()
Verfasst: Sonntag 9. Dezember 2007, 16:14
von lunar
debian75 hat geschrieben:naja, ich denke es ist schneller hier was zu fragen als sich durch die ganzen verstreuten und verschiedensprachigen tutorials zu wühlen....besonders wenn man nicht genau weiss wonach man suchen soll.
Also, so wahnsinnig viele Tutorial fallen mir da jetzt gar nicht ein. Das bereits erwähnte offizielle Tutorial und dann vielleicht noch
A Byte of Python. Welches du nimmst, ist letztendlich egal, weil die beide sowieso grob das selbe erzählen.
Suchen musst du eigentlich gar nichts, da die Frage eigentlich ziemlich klar sagt, dass du lieber nochmal das komplette Tutorial durchlesen solltest
EDIT: es tut mir leid wenn ich hier dumme fragen stelle aber ich dachte das "Allgemein" ist für sowas da ?
Allgemein ist für alle Python-Fragen da, die nicht in andere Kategorien passen. Insofern ist deine Frage hier schon richtig aufgehoben. Das Problem an deiner Frage ist vielmehr, dass das absolute Python-Basics sind. Sowas solltest du eigentlich schon wissen, bevor du hier fragst, denn wie Leonidas bereits sagte, ist das Forum eigentlich nicht dazu da, sich Tutorials vorlesen zu lassen.
Verfasst: Sonntag 9. Dezember 2007, 18:26
von Leonidas
debian75 hat geschrieben:EDIT: es tut mir leid wenn ich hier dumme fragen stelle aber ich dachte das "Allgemein" ist für sowas da ?
Das was du gefragt hast war aber nicht das was zu machen wolltest. Du wolltest Funktionen in Klassen aufrufen. Das sind Grundlagen. Hast du zumindest gemeint. Dann hast du die Fragestellung soweit geändert, dass es sich herausgestellt hat, dass du eigentlich Funktionen in einer Liste aufrufen wolltest.
Das ist doch ein wenig was anderes, nicht wahr? Kann man auch als
X-Y-Problem bezeichnen.