[Python-de] monkey patch mit einem egg

Diez B. Roggisch deets at web.de
So Mär 27 11:37:29 UTC 2011


Am 27.03.2011 um 12:14 schrieb robert rottermann:

> Hoi zäme,
>
> ich versuche eine methode einer Klasse die aus einem egg stamm mit  
> einem monkey pach anzupassen.
>
> das gelingt aber nicht.
> Python ist Version 2.4
>
> was ich mache ist folgendes:
> from xlwt import *
> def adjust_bound_col_idx(self, *args(...)
>    meine Anpassungen
>    ..
> Row.__adjust_bound_col_idx = adjust_bound_col_idx
>
> jedoch wird weiterhin die ursprüngliche methode genutzt.
>
> wenn ich im debugger die Klasse untersuche, hat sie zwei Methoden  
> mit dem Namen __adjust_bound_col_idx.
> Jedenfalls behaupted das die codeinspection von Wing4.
>
> Ist es möglich, dass "semiprivate" methoden die mit __ beginnen  
> nicht gepatcht werden können?

Doch, bestimmt. Du musst nur den gescopten (scheiss wort) Namen  
benutzen:



class Foo(object):


     def invoke(self):
         self.__protected()


     def __protected(self):
         print "original"


f = Foo()
f.invoke()


def fake(self):
     print "fake"

Foo._Foo__protected = fake

f.invoke()


Diez


Mehr Informationen über die Mailingliste python-de