RubyObject

classを宣言した時に、(スコープ内に)クラスが既に存在していれば、
既存のクラスを拡張しそれを返す。Rubyの様なclassの振舞を提供するメタクラス

import inspect

class RubyMetaClass(type):
    def __new__(self, classname, classbases, classdict):
        try:
            frame = inspect.currentframe()
            frame = frame.f_back
            if frame.f_locals.has_key(classname):
                old_class = frame.f_locals.get(classname)
                for name,func in classdict.items():
                    if inspect.isfunction(func):
                        setattr(old_class, name, func)
                return old_class
        finally:
            del frame
        return type.__new__(self, classname, classbases, classdict)

class RubyObject(object):
    __metaclass__ = RubyMetaClass

 >>> class C:
 ...   def foo(self): return "C.foo"
 ...
 >>> c = C()
 >>> print c.foo()
 C.foo
 >>> class C(RubyObject):
 ...   def bar(self): return "C.bar"
 ...
 >>> print c.bar()
 C.bar