О работе с метакласами по порядку:
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 "<stdin>", line 1, in <module> # TypeError: Can't instantiate abstract class A with abstract methods foo class C(A): def foo(self): print(42) print C #<class '__main__.C'> a=C() a.foo() #42
Комментарии 0
Пока нет комментариев. Станьте первым!