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

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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

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