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