<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Hero creation
Create a hero. The same can be done with Hero.from_name('Anti-Mage')
Step1:  Class attributes
It can be very useful to have hero's in-game name (how it is used in DotA files)
Step2:  Also you can get all the specs. This is the dictionary with a lot of parameters.
Step3:  Getting info
The way to get info about certain side of the hero.
List of all 'categories'
Step4:  If you want to combine few descriptions -- Hero.get_description() is the way to go.
Note that laning, roles and hero type are read from the game files and sometimes can be strange.
<ASSISTANT_TASK:>
Python Code:
am = Hero(1)
# You can use attributes to get some hero properties which depends on lvl, examples:
print('Anti-Mage stats on lvl {}'.format(am.lvl))
print('\tstrength   = {}'.format(am.str))
print('\tagility    = {}'.format(am.agi))
print('\tintellect  = {}'.format(am.int))
print('\t...')
Explanation: Hero creation
Create a hero. The same can be done with Hero.from_name('Anti-Mage')
End of explanation
sf = Hero.from_name('Shadow Fiend')
sf.in_game_name
Explanation: Class attributes
It can be very useful to have hero's in-game name (how it is used in DotA files):
End of explanation
pprint(am.specs)
Explanation: Also you can get all the specs. This is the dictionary with a lot of parameters.
End of explanation
am.get_role()
Explanation: Getting info
The way to get info about certain side of the hero.
List of all 'categories':
* type
* role
* laning
* attributes
functions look like hero.get_category(), where category is one of the above words.
End of explanation
print(am.get_description(include=['laning', 'role', 'name']))
Explanation: If you want to combine few descriptions -- Hero.get_description() is the way to go.
Note that laning, roles and hero type are read from the game files and sometimes can be strange.
End of explanation
<END_TASK>