Using callable objects has a disadvantage over using nested scopes as the code is generally longer and works slower. But it has an advantage as a collection of callables can share their signature via inheritance. The best practice would be to analyze the situation and use the best approach.