Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Python have something like anonymous inner classes of Java?

In Java you can define a new class inline using anonymous inner classes. This is useful when you need to rewrite only a single method of the class.

Suppose that you want create a subclass of OptionParser that overrides only a single method (for example exit()). In Java you can write something like this:

new OptionParser () {      public void exit() {         // body of the method     } }; 

This piece of code creates a anonymous class that extends OptionParser and override only the exit() method.

There is a similar idiom in Python? Which idiom is used in these circumstances?

like image 980
Andrea Francia Avatar asked Dec 10 '08 23:12

Andrea Francia


People also ask

Does Python have anonymous classes?

Python does not have anonymous functions, but they have dictionaries, and they work just as well.

Does Python support inner classes?

Inner or Nested classes are not the most commonly used feature in Python. But, it can be a good feature to implement code. The code is straightforward to organize when you use the inner or nested classes.

Are anonymous objects possible in Java?

Yes, we can use a method on an object without assigning it to any reference.

What is anonymous inner class in Java?

In Java, a class can contain another class known as nested class. It's possible to create a nested class without giving any name. A nested class that doesn't have any name is known as an anonymous class. An anonymous class must be defined inside another class. Hence, it is also known as an anonymous inner class.


1 Answers

You can use the type(name, bases, dict) builtin function to create classes on the fly. For example:

op = type("MyOptionParser", (OptionParser,object), {"foo": lambda self: "foo" }) op().foo() 

Since OptionParser isn't a new-style class, you have to explicitly include object in the list of base classes.

like image 50
Joe Hildebrand Avatar answered Sep 28 '22 09:09

Joe Hildebrand