Assigning prefabs to player script properties at runtime

The player object has a script attached to it which contain 3 public variables, representing three different weapons the player can use. The weapons are many different prefabs which will constantly change during runtime, so my question is how can I assign these weapon prefabs to the player at runtime (and access their scripts) when they don't technically exist yet?

I've not found a way to reference/create prefabs that are not already set to a property on a script.

One possible solution that comes to mind is to have a WeaponsArmory script that contains an array of prefabs representing all possible weapons, then create the weapon instances off of that and attach them to the player.