Объектная модель Python; декораторы

Долги за прошлый раз

Разбор решения задачи платная лестница

Параметрические генераторы

Пример:

   1 def pargen(n):
   2     c = 1 
   3     for i in xrange(n):
   4         c = yield i+c 
   5 
   6 def excgen(n):
   7     for i in xrange(n):
   8         try:
   9             yield i*2+1
  10         except NotImplementedError:
  11             print "Haha, Got it!"
  12 
  13 print "Sending a value within generator:"
  14 a=pargen(20)
  15 
  16 print "Initial:", a.next()
  17 for s in [1,-20,0]:
  18     print s,a.send(s)
  19 
  20 print "Now closing, immediate StopIteration expected"
  21 a.close()
  22 for r in a: print "!!!Should be no more iterations!!!", r
  23 print
  24 
  25 print "Throwing NotImplementedError sometimes:"
  26 s=excgen(6)
  27 for r in s:
  28     print r
  29     if(r%3 == 0): 
  30         s.throw(NotImplementedError)
  31 
  32 print "Done"

Обмен данными при запуске процессов

POSIX diff, итеративная сущность Differ-объекта в difflib

<!> Разбор ../Homework_TaskTester (FrBrGeorge/TaskTester.py, ../Homework_TaskTester.zip)

Классы и объекты в Python

Конструктор объекта — класс

Перегрузка операций

Старые и новые классы в Python2

Наследование и полиморфизм

ООП = «модульность, инкапсуляция, полиморфизм»

Разное:

Задание исключений

Декораторы

Шаблон программирования: «обёртка»:

Python: динамическое создание функции-обёртки:

   1 def dumper(fun):
   2     def newfun(*ap, **an):
   3         print ap, an,
   4         res = fun(*ap, **an)
   5         print '->', res
   6     return newfun
   7 
   8 def d(a,b,c):
   9     return b*b-4*a*c
  10 
  11 d = dumper(d)
  12 discr = d(2,3,1)

Что то же самое:

   1 
   2 @dumper
   3 def d(a,b,c):
   4     return b*b-4*a*c
   5 

Примеры: @classmethod, @staticmethod, в новых классах — @property (с помощью .__getattribute__()).

   1 class C(object):
   2     def __init__(self, n):
   3         self.__x=n
   4 
   5     @property
   6     def x(self):
   7         return self.__x
   8 
   9     # Проверить, что будет, если удалить эти три строки
  10     @x.setter
  11     def x(self,n):
  12         self.__x=n
  13 
  14     def simple(*args):
  15         print "Simple:",args
  16 
  17     @staticmethod
  18     def stat(*args):
  19         print "Static:",args
  20 
  21     @classmethod
  22     def cla(*args):
  23         print "Classmethod",args
  24 
  25 c=C(123)
  26 print c.x
  27 c.x=321
  28 c.simple(1,2,3)
  29 c.stat(1,2,3)
  30 c.cla(1,2,3)

Параметрический декоратор — второй уровень косвенности, функция, возвращающая декоратор:

   1 import time
   2 
   3 def pause(t):
   4     def wrapper(f):
   5         def tmp(*args, **kwargs):
   6             time.sleep(t)
   7             return f(*args, **kwargs)
   8         return tmp
   9 
  10     return wrapper
  11 
  12 @pause(4)
  13 def func(x, y):
  14     return x + y
  15 
  16 print func(1, 2)

<!> Декораторы бывают и у классов

Д/З

Прочитать

Задачи и упражнения


CategoryClass

Lectures/PythonIntro/2015-03-16 (последним исправлял пользователь Class1 2015-03-17 15:03:43)