local Class = {} Class.__index = Class function Class.new(v) return setmetatable({v=v}, Class) end function Class:A() return "A"..self.v end function Class:B(x) return "B"..self.v..tostring(x) end local originalNew = Class.new Class.new = function(...) local w = originalNew(...) w.captured = true return w end local originals = {} for _, name in ipairs({"A", "B"}) do local original = Class[name] if type(original) == "function" then originals[name] = original Class[name] = function(self, ...) return original(self, ...) end end end local w = Class.new(7) print(w:A(), w:B(9)) local c = getmetatable(w) for n, f in pairs(c) do if type(f)=="function" then print(n, f(w, 9)) end end