Top.Mail.Ru
python по русски -- Day
? ?
python по русски -- Day [entries|friends|calendar]
Ру_питон

[ userinfo | livejournal userinfo ]
[ calendar | livejournal calendar ]

патч для __init__ [27 Jul 2007|02:32pm]
Пытаюсь сделать патчилку конструктора класса через ф-цию.
для всех классов которые надо патчить есть 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 не удалось ._.
4 comments|post comment

navigation
[ viewing | July 27th, 2007 ]
[ go | previous day|next day ]
Image