Image

патч для __init__

Пытаюсь сделать патчилку конструктора класса через ф-цию.

для всех классов которые надо патчить есть prepare() или подобный classmethod.

простая замена __init__ не подходит, т.к. надо вызывать и то что записано в оригинальном методе.

пока получилось сделать только так:



#!/usr/bin/env python

# -*- coding: koi8-r -*-



class X(object):

    #@dec ... с декоратором всё просто, но нужно обойтись без изменений текста класса

    def __init__(self):

        print 'world'



def prepare():

    orig_init = X.__init__ # сохранение X.__init__

    def hacked_up_decoration(self):

        print 'hello'

        orig_init(self) # вызов конструктора

        print '=^_^='

    X.__init__ = hacked_up_decoration # замена конструктора



if __name__ == '__main__':

    prepare()

    x = X()




-------------

hello

world

=^_^=

-------------


можно ли сделать проще или другим способом?

прицепить декоратор через DecoratorTools не удалось ._.