40

I am familiar with the AspectJ extension for the Java language.

I want to know if there is such a thing for Python.

Don't get me wrong, I do not mean a library but a language extension like AspectJ is to Java.

6
  • 11
    Keep in mind that Python != Java. So something that requires a full "language extension" in Java might be performed by an entirely different mechanism in Python (including, perhaps, just a library). Are there any particular AOP aspects being looked for? Commented Sep 10, 2012 at 17:37
  • @pst AspectJ is kind of de facto for Java. As I know, there are some libraries for Python that implement AOP, but I am not sure of their mainstream acceptance . Commented Sep 10, 2012 at 17:38
  • 1
    @esaelPsnoroMoN I was not asking about library support. But, if there is, or planned to be a language extension that supports AOP. Commented Sep 10, 2012 at 17:42
  • I've never really seen a convincing example of AOP. Not saying there aren't uses, but the examples always look like a way to make code much more difficult to understand for no benefit. Commented Sep 10, 2012 at 17:45
  • 1
    @jsbueno I have read your answer. I come from a C family of languages, so for dynamic languages like Python I still do not comprehend all their features. Commented Sep 10, 2012 at 17:58

2 Answers 2

47

2024 update 12 years later, Python has improved, and so my understanding on its dynamism. Upon re-reading this, I double down on the answer bellow: Aspect orientation is trivial to implement as a Proof of Concept in a Python Library, and easy to do in a production ready way. The example code linked may be a little dated, though. If anyone has a more specific requirement, feel free to ask.

As an update side-note, at the time of the original answer, I called "annotations" a "little known feature" back in 2012, which is of course extensively used nowadays to implement gradual typing. Among the typing mechanisms, there is typing.Annotate which can still allow for arbitrary callable metadata if that is desired to implement an AoP mechanism.

original answer

Python does not need something like a "language extension" for being able to work in an Aspect Oriented way.

That is simply due to the dynamic mechanisms in Python itself. A Google search will yield a couple projects - but despite looking merely like libraries, it is all that is needed in Python.

I am not making this up - it is the fact that you can introspect classes and methods, and change them at run-time. When I first learned about Aspect Orientation, I could implement some proof of concepts in Python in a couple of hours - certainly some of the existing projects can offer production-quality entries.

But since you asked, there is a Python "language extension" of sorts that could be used for Aspect Orientation: when I made the proof of concept I mentioned above, I used to check the input parameters to methods at run-time to determine whether certain methods would be affected by a rule or not.

In Python 3 there is a little known feature of the language that allows one to annotate the input parameters and return value of a function or method. An aspect orientation library could make use of this to apply its magic at "load time", and not at the time of each function call.

BTW, here is my quick hack to get a working example of using Aspect Orientation with Pure Python. Sorry - the code comments are in pt_BR - https://github.com/jsbueno/metapython/blob/main/aspect.py

Sign up to request clarification or add additional context in comments.

13 Comments

@gnychis: done. I usually like my stuff "share alike", so I attached LGPL_v3 to the repository as a whole. Since you manifested interest in the AOP example alone, I left that one under MIT, so you don't feel constrained by anything. Just ask if you want anything else. (I'd probably like to pair up to upgrade that to a full Python module if you have a project to make use of it)
rock on, thanks so much @jsbueno! I definitely have a project that will be using it. I've found it to be a nice and simple implementation, whereas many other AOP libraries are overly complex.
Thank you for coming back to this aging answer - and, although I had not updated the code above, and not checked on the libraries, you will see that the possibility of Python dynamism go far beyond decorators - and it is perfectly feasible to have all desired aspects of AOP with simple libraries - as they can be made to intercept calls at run time. Using the same mechanisms for testing is also trivial. 2020 and "full AOP" is still a solution searching for a problem, and various partial solutions - including decorators and event systems can address the major pain points AOP should solve.
@jsbueno I know you can intercept call at runtime and without using decorator explicitly, and my bad, I read the question in the wrong way -_-..... I just realized you wrote "Python doesn't need language extension to achieve AOP" which is totally true. I thought you wrote "Python doesn't need AOP", which is what I was arguing (the purpose of handling crosscutting concerns). I'll put back an upvote on your answer.
The code bucket link doesn't work as of 2021-02-19. If someone could add example code for this in the answer itself it would be helpful
|
5

You can use Spring Python

Link : http://docs.spring.io/spring-python/1.2.x/sphinx/html/aop.html#aspect-oriented-programming

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.