> I'll just point out that this statement could be applied to anything in order to dismiss it. Including underscores.

Of course... the point I was making is that there's nothing really important about the different styles. None of them are intrinsically better than the others. The only important part of it is consistency, and to be consistent with most Python code you should use underscores.

I wonder if, when first introducing the decorator with arguments, it might be better to use a wrapping function around a class instead of the other way around. That way the class can look pretty much the same as the class used for the argument-less decorator, which will make the reader immediately understand what's different in this example.

I prefer an alternate form of your "decorator with arguments" class implementation that I would like to share with you. When I see this:

@decoratorWithArguments("Hello", "World", 42)

I think of this as a function that RETURNS a decorator as opposed to a decorator class that returns a function. That way, you don't need as much of a paradigm shift when using vs not using arguments, while still getting the benefit of not having to explicitly save arg1, arg2, and arg3. Here is how your example would be implemented using this concept:

NOTE: The strings that are printed do not exactly make sense with my implementation, but I left them like this to show the parallel to your implementation. The output of this program is identical to yours.