On Saturday, November 14, 2015 at 7:38:09 AM UTC-5, Chris Warrick wrote: > On 14 November 2015 at 13:13, fl <rx**g...@gmail.com> wrote: > > On Saturday, November 14, 2015 at 7:11:11 AM UTC-5, fl wrote: > >> Hi, > >> > >> I am learning decorator following this link: > >> > >> http://thecodeship.com/patterns/guide-to-python-function-decorators/ > >> > >> When I read decorator on class, I don't see decorator taking in effect. > >> In the following code snippet, there is the same print out if I comment out > >> two lines 'def p_decorate(func):' and '@p_decorate'. > >> > >> Can you tell me what role of decorator in this code? > [snip code] > > > > My OP may not be clear enough. Here is the key question. After the function > > definition, there is no obvious decorator application in the function call: > > > > my_person = Person() > > print my_person.get_fullname() > > > > Where is the difference between the non-decorator and decorator in this > > example? > > > > Thanks, > > -- > > https://mail.python.org/mailman/listinfo/python-list > > Have you tried executing the code with and without the decorator? > > $ python2 without-decorator.py > John Doe > $ python2 with-decorator.py > <p>John Doe</p> > > Basically, the decorator wraps the output of your get_fullname > function with HTML <p> tags. > > (Running code examples is a great way to understand them.) > > -- > Chris Warrick <https://chriswarrick.com/> > PGP: 5EAAEA16
Thanks. I did run the code, but I did not check the difference carefully between them. A following problem now is about the args in class decorate. I do not see args and kwargs are transferred by get_fullname(self). If I change return "<p>{0}</p>".format(func(*args, **kwargs)) to return "<p>{0}</p>".format(func(*args)) The outputs are the same. But it is quite different if it is changed to: return "<p>{0}</p>".format(func) What roles are args and kwargs? I know C language. For Python here, I don't see some rules on the args. Thanks again. ///////////// def p_decorate(func): def func_wrapper(*args, **kwargs): return "<p>{0}</p>".format(func(*args, **kwargs)) return func_wrapper class Person(object): def __init__(self): self.name = "John" self.family = "Doe" @p_decorate def get_fullname(self): return self.name+" "+self.family my_person = Person() print my_person.get_fullname() -- https://mail.python.org/mailman/listinfo/python-list