Page 46 - 6734
P. 46

керування контекстом
               def __init__(self,a):
                   self.a=a
               def __enter__(self): # викликається під час входу
           в `with`
                   print 'with enter'
                   return self # obj=self
               def __exit__(self,type,value,tb): # викликається
           під час виходу з `with`
                   print 'with exit'
                   return False
           with A(1) as obj: # тут викликається __enter__
               print obj.a
           # тут викликається __exit__

           #
           with enter
           1
           with exit

                                      Метакласи

               Метакласи – це об’єкти, які створюють класи [16, 19, 37, 38].
           Відомим метакласом є функція type. Метакласи використовуються
           для  створення  класів  на  етапі  виконання.  Нижче  показані  різні
           способи використання метакласів.

           def cls_factory(a,fn): # функція створює новий клас
           із атрибутами `a`,`fn`
               class C(object):pass # пустий клас, успадкований
           від object
               setattr(C,'a',a) # установити атрибут `a`
               setattr(C, fn.__name__, fn) # установити атрибут
           `fn`
               return C # повернути клас
           def method1(self): # метод класу

                                          45
   41   42   43   44   45   46   47   48   49   50   51