LObject = {name = "aaa"} function LObject:new(o) self.__index = self o = o or {} setmetatable(o,self) return o end function LObject:test() print(self.name) end LHuman = {age = 0} function LHuman:new(o) self.__index = self o = o or {} setmetatable(o,self) return o end function LHuman:ptest() print(self.name.." "..self.age) end function Class(...) local function search(k, plist) for i = 1,#plist do local v = plist[i][k] if v then return v end end end local c = {} local parents = {...} setmetatable(c, {__index = function(t, k) return search(k, parents) end}) function c:new(o) o = o or {} setmetatable(o, c) c.__index = c return o end return c end LWoman = Class(LObject,LHuman) yangxiumiao = LWoman:new({name="Yang Xiu Miao",age=27}) yangxiumiao:ptest()