らんだむな記憶

blogというものを体験してみようか!的なー

インスタンスメソッド置換

#! /usr/bin/env python
# -*- coding: utf-8 -*-

class Base(object):
    def print_num(self):
        print(self.number())

    def number(self):
        return 3

def new_number(self):
    return self._old_number() + 5

def replace_number():
    if not hasattr(Base, "_old_number"):
        Base._old_number = Base.number
    Base.number = new_number

if __name__ == "__main__":
    x = Base()
    x.print_num()
    replace_number()
    y = Base()
    y.print_num()
    z = Base()
    z.print_num()
    print(z._old_number())

とかすれば既存クラスの動きを一応変更できそうだなぁ。そして、オリジナルのインスタンスメソッドも必要に応じて呼び出せる。