---Declare table as a base class ---@param cls table class table ---@param o table class instance table ---@return table o base class instance table function Base(cls, o) cls.__index = cls o = o or {} setmetatable(o, cls) return o end ---Declare table as a derived class ---@param cls table class table ---@param base table base class table ---@param o table class instance table ---@return table o derived class instance table function Inherit(cls, base, o) cls.__index = cls setmetatable(cls, {__index = base}) o = base:new(o) setmetatable(o, cls) return o end