О работе с метакласами по порядку:

1)Простой пример создания метакласса:

# coding=utf-8
class AttributeInitType(type):
    def __call__(self, *args, **kwargs):
        """Вызов класса при котором создается новый объект. """
        #создаем сам объект
        obj = type.__call__(self, *args)
        #добавляем нашему классу переданные атрибуты
        for name in kwargs:
            setattr(obj, name, kwargs[name])
        # вернем готовый объект
        return obj

#создадим новый класс на основе нашего метакласса
class Example(object):
    __metaclass__ = AttributeInitType

#cоздаем объект и его атрибуты через аргументы
me = Example(height = 180, weigth = 80)
print me.height #180
print me.weigth #80

2)Пример определения абстрактного класса:

from abc import ABCMeta, abstractmethod
class A(object):
    __metaclass__=ABCMeta
    @abstractmethod
    def foo(self): pass

print A()
# Traceback (most recent call last):
#   File "", line 1, in 
# TypeError: Can't instantiate abstract class A with abstract methods foo

class C(A):
    def foo(self): print(42)

print C
#
a=C()
a.foo() #42