Klassenmethoden zur Laufzeit definieren

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.
hiasl
User
Beiträge: 31
Registriert: Donnerstag 20. April 2006, 13:36

Freitag 16. März 2007, 14:17

Für den Fall, dass jemand ein ähnliches Problem hat, hier eine funktionierende Lösung:

Code: Alles auswählen

from new import instancemethod

class X(object):
	def __init__(self, x):
		if x:
			def t(self):
				print "A"
		else:
			def t(self):
				print "B"
		self.__setattr__('t', instancemethod(t, self, X))

X(1).t()
X(0).t()
@BlackJack: Die Diskussion führt zu keinem Ergebnis - weder für Dich noch für mich. Trotzdem Danke und noch einen schönen Tag :)
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 16. März 2007, 14:19

Warum nicht so:

Code: Alles auswählen

class X(object):
    def __init__(self, x):
        if x:
            def t():
                print "A"

        else:
            def t():
                print "B"
        self.t = t

X(1).t()
X(0).t()
EDIT: Ah, ok... wenn man zugriff auf self haben möchte, geht's so nicht ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Freitag 16. März 2007, 14:47

BlackJack hat geschrieben:Oder in diesem Beispiel alternativ eine Factory-Funktion die eines von zwei Objekten zurückgibt.
Sorry wenn ich hier so reinplatze. Was sind Factory-Funktion? :? Sowas wie Closures?
hiasl
User
Beiträge: 31
Registriert: Donnerstag 20. April 2006, 13:36

Freitag 16. März 2007, 14:54

sape hat geschrieben:
BlackJack hat geschrieben:Oder in diesem Beispiel alternativ eine Factory-Funktion die eines von zwei Objekten zurückgibt.
Sorry wenn ich hier so reinplatze. Was sind Factory-Funktion? :? Sowas wie Closures?
Eine Factoryfunktion instantiiert ganz einfach in Abhänigkeit von Parametern Objekte von nunterschiedlichen Klassen. Damit hast Du einen zentralen Objekterzeuger und musst selbst nicht immer Fallunterscheidungen implementieren.

Gern zitiertes Beispiel:
Du kannst für jede Pizza eine eigene Klasse schreiben.
Den Pizzabäcker implementierst Du als Factory, der bei Bestellung der Pizza in Abhängigkeit des Pizzanamens die richtige Pizza erzeugt.
Antworten