run on later calls to support multiple nested steps of augmentation this waydecorator syntax allows you to add multiple layers of wrapper logic to decorated function or method when this feature is usedeach decorator must appear on line of its own decorator syntax of this form@ @ @ def )runs the same as the followingdef ) ( ( ( ))herethe original function is passed through three different decoratorsand the resulting callable object is assigned back to the original name each decorator processes the result of the priorwhich may be the original function or an inserted wrapper if all the decorators insert wrappersthe net effect is that when the original function name is calledthree different layers of wrapping object logic will be invokedto augment the original function in three different ways the last decorator listed is the first appliedand is the most deeply nested when the original function name is later called (insert joke about python "interior decoratorsherejust as for functionsmultiple class decorators result in multiple nested function callsand possibly multiple levels and steps of wrapper logic around instance creation calls for examplethe following code@spam @eggs class cx (is equivalent to the followingclass cc spam(eggs( ) (againeach decorator is free to return either the original class or an inserted wrapper object with wrapperswhen an instance of the original class is finally requestedthe call is redirected to the wrapping layer objects provided by both the spam and eggs decoratorswhich may have arbitrarily different roles--they might trace and validate attribute accessfor exampleand both steps would be run on later requests decorators