Because it does more things that just patching. Depending on the target object it will patch and/or create one or more subclasses and objects.
Some frameworks don't resort to monkey patching but instead force the user to use ridiculous amounts of abstractions and wrapping in order to make weaving possible. Notable example: spring-python.
For all intents and purposes I think it's wrong to have such high amount of boilerplate in Python.
Also, aspectlib
is targeting a different stage of development: the maintenance stage - where the code is already
written and needs additional behavior, in a hurry :)
Where code is written from scratch and AOP is desired there are better choices than both aspectlib
and
spring-python
.
aspectlib
was initially written because I was tired of littering other people's code with prints and logging
statements just to fix one bug or understand how something works. aspectlib.debug.log
is aspectlib
's crown
jewel. Of course, aspectlib
has other applications, see the :doc:`rationale`.