Concept
I am designing turn-based boss battles and want each boss to have different behaviors and skills they perform during a battle. The boss is selected randomly and is identified by a unique string that we will call the boss_id.
Issue
If I have many different bosses, the battle logic would contain long sections of if and else if statements to account for every boss_id which would be very messy and hard to maintain.
The idea I have come up with is defining a dictionary with the boss_id as the key pointing to a function containing the unique logic for that boss. This idea sounds much cleaner and more modular, but having hundreds of functions sounds like I may be approaching this all wrong.
Question
What are other/better design approaches than the one I have described?
If the programming language matters for certain implementations; I am using Python
Edit #1
Another idea I have had is adding behavior code at every possible trigger point in the battle logic. The boss_id will point to behavior data in a dictionary which will fill parameters of the behavior code and cause different actions, even no action.
This seems to be a powerful approach since some bosses may have repeat behaviors but with slight numerical variations.