class Magic(type):
        def __new__(cls, name, bases, d):
                for name, function in d.items():
                        try:
                                function._marked
                                print 'Class: %s' % cls
                                print 'Method: %s' % name
                                def wrapper(function):
                                    def toXML(self, *args, **kwargs):
                                            return self._toXML(function(self, *args, **kwargs))
                                    def toList(self, *args, **kwargs):
                                            return self._toList(function(self, *args, **kwargs))
                                    return toXML, toList
                                
                                d[name+'XML'], d[name+'List'] = wrapper(function)
                        except AttributeError:
                                #traceback.print_exc()
                                pass
                return type(name, bases, d)

def mark(f):
        f._marked = True
        return f

class test(object):
        __metaclass__ = Magic

        def _toXML(self, value):
                return '<xml>%s</xml>' % value
        def _toList(self, value):
                return '<list>%s</list>' % value

class testtest(test):
        __metaclass__ = Magic



        @mark
        def printData(self, data):
                return 'child-%s' % data


t = testtest()
print t.printData('data')
print t.printDataXML('data')
print t.printDataList('data')

