Hacker News new | past | comments | ask | show | jobs | submit login

The decorator syntax

  @decorator2
  @decorator1
  def foo(*args):
      pass
is just a shorthand for

  def foo(*args):
      pass
  foo = decorator2(decorator1(foo))
I completely fail to see the visitor pattern here, even with stretching until breaking.



Python decorator can do more than just that.

@decorator1 can be a completely different class which manipulate foo.__class__


Certainly, it is an arbitrary python function, so the resulting foo might be a dictionary or whatever. But this doesn't push it closer to the visitor pattern.

Certainly, you can use decorators as a tool to implement the visitor pattern by implementing some hairy, magical reflecting class-decorator which adds a method visit to an object, which then calls visit_{CLASSNAME} on the parameter, but this is just a way of implementing this and not the visitor pattern in itself.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: