Com certeza, a única coisa que poderia ser diferente na sua sugestão é que, ao invés de passar cada atributo como prop, apenas desestruturar no init:
class Pokemon:
def __init__(self, name, attibutes):
self.name = name
for attr_key, attr_value in attributes.items():
# Example: self.HP = attributes["HP"]
self.__dict__[attr_key] = attr_value
Desse jeito não ficaria tão verboso e facilitaria na hora de implementar novos atributos.