Объектная модель Python3

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

Циклический конструктор генератора

>>> a=(i*2+1 for i in range(0,10,2) if i!=6)
>>> a
<generator object <genexpr> at 0x7feea8cd2938>
>>> next(a)
1
>>> next(a)
5
>>> next(a)
9
>>> next(a)
17
>>> next(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> def fn(seq):
...     print(*seq)
... 
>>> fn((1,2,3))
1 2 3
>>> fn(i*2+1 for i in range(10) if i!=6)
1 3 5 7 9 11 15 17 19

При передаче такого генератора в качестве единственного параметра функции скобки можно убрать.

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

Статья на Хабре (это продолжение, можно почитать и предыдущие две)

   1 def multicall(times):
   2     def decorator(fun):
   3         def newfun(*args):
   4             return [fun(*args) for i in range(times)]
   5         return newfun
   6     return decorator
   7 
   8 @multicall(5)
   9 def simplefun(N):
  10     return N*2+1
  11 
  12 print(*simplefun(4))

Объектная модель Python3

Основная статья: первый скетч про классы

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

Базовая статья: datamodel.html

Достаточно в классе определить соответствующие методы, и начинают работать len(), str() (и т. п.), а также всевозможные операции над экземплярами этого класса

Д/З

  1. Прочитать про классы в tutorial; про «волшебные методы» например, тут