
Hi, ich hab hier folgendes Problem: Ich wrappe ein Methode (keine function, hat also self argument + is bound) etwa so: def create_wrapper(method): [...] 1 def _wrapper(*args, **kw): 2 caller = args[0] 3 4 [code...] 5 apply(method, args, kw) Die Zuweisung in Zeile 2 funktioniert nicht, obwohl die methode die per apply dann aufgerufen wird plötzlich diesen self parameter hat und dieser auch richtig ist. ein print args zeigt mir aber auch nur eine leere liste. woher nimmt sich also apply diesen self parameter? Gruss Simon _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo! Ich muss ehrlich sagen, ich verstehe nicht, was Du meinst :-( Schreib am besten einen winzigen Codebeispiel, der aber zeigen wuerde, was fuer Dich nicht erwartungsgemaes funktioniert. Gruesse, Tomek P.S. Es ist ein guter Brauch in dieser Liste, seinen vollen Namen zu benutzen.
Hi,
ich hab hier folgendes Problem: Ich wrappe ein Methode (keine function, hat also self argument + is bound) etwa so:
def create_wrapper(method):
[...] 1 def _wrapper(*args, **kw): 2 caller = args[0] 3 4 [code...] 5 apply(method, args, kw)
Die Zuweisung in Zeile 2 funktioniert nicht, obwohl die methode die per apply dann aufgerufen wird plötzlich diesen self parameter hat und dieser auch richtig ist. ein print args zeigt mir aber auch nur eine leere liste.
woher nimmt sich also apply diesen self parameter?
Gruss Simon
-- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -------------------------------------------------- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualitätssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo!
Ich muss ehrlich sagen, ich verstehe nicht, was Du meinst :-( Schreib am besten einen winzigen Codebeispiel, der aber zeigen wuerde, was fuer Dich nicht erwartungsgemaes funktioniert.
Gruesse, Tomek
P.S. Es ist ein guter Brauch in dieser Liste, seinen vollen Namen zu benutzen.
Oh Sorry - is geändert - hier ein ausführliches Beispiel: a) Ich habe ein Klasse <Dummy>
class Dummy: def bound_method(self): print 'method belongs to: ' + str(self)
b) ... eine methode die wrappen soll
def wrap(method): def _method_wrapper(*arg, **kw): print arg apply(method, arg, kw)
return _method_wrapper c) und eine Ausgabe die mir nicht passt :-(
cl = Dummy() cl.bound_method = wrap(cl.bound_method) cl.bound_method() () method belongs to: <__main__.Dummy instance at 0x00A71140>
d) ich würde aber gerne auf das self zugreifen können, also so etwas schreiben:
def wrap(method): def _method_wrapper(*arg, **kw): caller = args[0] # hier würd ich gern das self haben, also diese <__main__.Dummy instance at 0x00A71140> apply(method, arg, kw)
return _method_wrapper wie kann ich sonst auf ein schon gebundenes self zugreifen?? thx Simon _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

:: :: Oh Sorry - is geändert - hier ein ausführliches Beispiel: :: :: a) Ich habe ein Klasse <Dummy> :: :: >>> class Dummy: :: def bound_method(self): :: print 'method belongs to: ' + str(self) :: :: b) ... eine methode die wrappen soll :: :: >>> def wrap(method): :: def _method_wrapper(*arg, **kw): :: print arg :: apply(method, arg, kw) :: :: return _method_wrapper :: :: :: d) ich würde aber gerne auf das self zugreifen können, also :: so etwas schreiben: :: :: >>> def wrap(method): :: def _method_wrapper(*arg, **kw): :: caller = args[0] # hier würd ich gern :: das self haben, also diese <__main__.Dummy instance at 0x00A71140> caller = method.im_self muesste funktionieren. Gruß, Uwe. _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

Hi! Wenn Du eine Methode hast, dann hast Du den self-Parameter als im_self Attribut. Ich hoffe, der Code ist selbserklärend:
class Plus: ... def __init__(self, v): ... self.v = v ... def plus(self, value): ... return self.v + value ... Plus.plus <unbound method Plus.plus> p = Plus(1) p.plus(2) 3 p.plus <bound method Plus.plus of <__main__.Plus instance at 0x008FA8F0>> p <__main__.Plus instance at 0x008FA8F0> method = p.plus method.im_self <__main__.Plus instance at 0x008FA8F0> method(2) 3 def wrap(fun): ... def wrapped(*args, **kwargs): ... print "calling method..." ... print "result: ", fun(*args, **kwar ... return wrapped ... w = wrap(method) w <function wrapped at 0x00901230> w(2) calling method... result: 3
Gruesse, Tomek -- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -------------------------------------------------- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualitätssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de

Thx an alle! funkt und macht mich glücklich ;-) Simon -------------------------------------------------------------- On 20.08.2003 at 15:26 Tomek Meka wrote:
Hi!
Wenn Du eine Methode hast, dann hast Du den self-Parameter als im_self Attribut. Ich hoffe, der Code ist selbserklärend:
class Plus: ... def __init__(self, v): ... self.v = v ... def plus(self, value): ... return self.v + value ... Plus.plus <unbound method Plus.plus> p = Plus(1) p.plus(2) 3 p.plus <bound method Plus.plus of <__main__.Plus instance at 0x008FA8F0>> p <__main__.Plus instance at 0x008FA8F0> method = p.plus method.im_self <__main__.Plus instance at 0x008FA8F0> method(2) 3 def wrap(fun): ... def wrapped(*args, **kwargs): ... print "calling method..." ... print "result: ", fun(*args, **kwar ... return wrapped ... w = wrap(method) w <function wrapped at 0x00901230> w(2) calling method... result: 3
Gruesse, Tomek
-- COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test -------------------------------------------------- 1. GMX TopMail - Platz 1 und Testsieger! 2. GMX ProMail - Platz 2 und Preis-Qualitätssieger! 3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post
_______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (4)
-
Simon Pamies
-
tHeBiP
-
Tomek Meka
-
Uwe Schmitt