Suggestions for class extensability

I have made a basic ship blueprint that covers the flying, and collision and whatnot. I’ve also made a struct that feeds a data table for various types of guns like this:

{
  weaponType: enum (e_weapon_types),
  energyDrain: float,
  shotsPerMinute: float,
  lifeSpan: float,
  projectileMesh: static mesh reference,
  homing: boolean
}

Now the problem I have is that there are many different ships with many different types of guns and gun configurations (e.g. 2 gun fires, 1 gun fire and 1 on auto turret mode, or another ship with 4 guns that fire sequentially, 2 and 2 or all 4).

My thought so far was to have a child for each new ship that has some sort of init function which sets the number of weapons for the ship.

I’m trying to keep this as extensible as possible. In an optimal world I would like to be able to add one row in a “ships data table” that describes ship meshes, hit points, guns, etc. and would then be automatically able to spawn that ship. This would obviously not work if I had to create a separate child BP of the base ship for each ship I add.

Can someone point me in the direction of how I should organize this?