Seite 1 von 1

Verfasst: Freitag 16. März 2007, 14:17
von hiasl
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 :)

Verfasst: Freitag 16. März 2007, 14:19
von jens
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 ;)

Verfasst: Freitag 16. März 2007, 14:47
von sape
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?

Verfasst: Freitag 16. März 2007, 14:54
von hiasl
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.