Basis Frage zu Klassen und Methoden (Funktionen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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()
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Warum müssen wir dir das Tutorial vorlesen? Lies es doch einfach selbst, da steht doch alles drin...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

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 ?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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...
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.
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

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:

Code: Alles auswählen

liste = [A, B, C, D]
for li in liste:
    self.li
wie von dir vorgeschlagen, aber das frisst er wieder nicht von wegen global name A not defined.
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.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

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()

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten