Skip to main content

Python Metaprogramming

Python Metaprogramming.

One of the most important things that programmers should keep in mind is “do not repeat yourself”. This means that programmers should not repeat the same code again – in fact they must re-use the code. Programmers must look for an elegant solution when they faced any problem of creating highly repetitive code. In Python, this problem can be solved using the concept of meta-programming.

Meta-programming is the concept of building functions and classes whose main target is to manipulate code by modifying, wrapping or generating existing code.
The major features of meta-programming are:
  • Decorators
  • Metaclasses
  • Class-decorators
There are also a varied range of useful topics that costs a huge demand when come under the umbrella of meta-programming such as: signature objects, check for internal classes and functions, execution of ‘exec ()’ codes etc. The default/base metaclass is called “type”; in some cases programmers can gain control by manipulating or modifying the way classes are constructed – by adding extra accomplishment or injecting extra codes along with it. So, in these types of cases programmers can use metaclass-programming some of the class-objects that already exist.
In other words, classes are just objects so programmers can introduce the concept of meta-classes into their practice to customize their creation.

Putting Wrapper For A Function

Programmers can get the facility to add wrapper as a layer around a function to add extra processing capabilities such as timing, logging etc. The simple code to do this is:
Example:
#!/usr/bin/python
import time
from functools import wraps
def karltime(func):

#Decorator for reporting the execution time.
@wraps(func)
def wrapper(*args, **kwargs):
start
= time.time()
result
= func(*args, **kwargs)
end = time.time()
print(func.__name__, end-start)
return result
return wrapper
Here is a program (connected with the previous program) segment that is using simple decorator
Example:
#!/usr/bin/python

@karltime
def countdown(n):
while n > 0:
n
-= 1
The decorator in Python’s meta-programming is a special form of function that takes functions as input and returns a new function as output.
There are some built-in decorators viz:
  • @classmethod
  • @staticmethod
  • @property

Working Of Metaclass

A metaclass can be any class that gets inherited from “type”. It usually overrides either __new__ or __init__ to offer customized behavior. A custom-metaclass can be placed explicitly on a class like this:
Example:
#!/usr/bin/python

class karlClass(object):

__metaclass__
= karlMeta

Another Meta Programming

Metaclass create class; normally when we build class by writing the word ‘class’, the default metaclass “type” gets automatically invoked to build that class. Classes are often referred to as types and are fairly sensible. Programmers can also add base-classes, fields and methods. Program showing how they are used:
Example:
#!/usr/bin/python

def karl(self, myName):
print("RAY, " + myName)

MyList = type('MyList', (list,), dict(x=62, karl=karl))

ml
= MyList()
ml
.append("Mango")
print(ml)
print(ml.x)
ml
.karl("KARLOS")
print(ml.__class__.__class__)
Output:
['Mango']
62
RAY, KARLOS
<class 'type'="">

Metaclass Hooking

Until now, we have used the “type” metaclass directly; it involves hooking won operation into a creation of class objects and can be achieved by:

  1. Writing a sub-class of the metaclass.
  2. Inserting new metaclass using the ‘metaclass hook’.

Comments

For Programs Click Here

Popular posts from this blog

Python Lists

Python Lists Dealing with data in a structured format is quiet generous, and this is possible if those data are set accordingly in a specific manner. So, Python provides these data structures named ‘lists’ and ‘tuples’ that are used to organize data in  single set. Python has 6 built-in sequences and among them the most famous are “lists and tuples”. The lists are containers that hold a number of other objects in a given order. It usually puts into practice the sequence protocol and allows programmers to add or remove objects from that sequence. Each element of the sequence is assigned a number i.e. he index and the first index is 0 (zero). This versatile data-type of Python is written in a sequence of list separated by commas between expressions. Creating Lists To build a list, just put a number of expressions in square brackets. The syntax is: Syntax: lst1 = [ ] # lst1 is the name of the list lst2 = [ expression1 , …. , expression_N ] Example: #!/usr/bin/python ls...

C++ Objects and Classes

C++ Object Oriented C++ Objects and Classes In object-oriented programming languages like C++, the data and functions (procedures to manipulate the data) are bundled together as a self-contained unit called an object. A class is an extended concept similar to that of structure in C programming language; this class describes the data properties alone. In C++ programming language, class describes both the properties (data) and behaviors (functions) of objects. Classes are not objects, but they are used to instantiate objects. What is a class? A class is an abstract data type similar to ‘ C structure ‘. Class representation of objects and the sets of operations that can be applied to such objects. Class consists of Data members and methods. Primary purpose of a class is to held data/information. This is achieved with attributes which is also know as data members. The member functions determine the behavior of the class i.e. provide definition for supporting various operations on data held...

Java Method Overriding

Java Method Overriding Declaring a method in the subclass which already exists there in the parent class is known as method overriding. When a class is inheriting a method from a superclass of its own, then there is an option of overriding the method provided it is not declared as final. The advantage of using overriding is the ability to classify a behavior that’s specific to the child class and the child class can implement a parent class method based on its necessity. There are certain rules that a programmer should follow in order to implement overriding. These are: In Java, a method can only be written in the child class and not in same class. Argument list should be exactly the same as that of the overridden method of that class. Instance methods can also be overridden if they are inherited by the child class. A constructor cannot be overridden. Final – declared methods cannot be overridden. Any method that is static cannot be used to override. The return type must have to be the...