разбирался с http://www.python.org/doc/2.4/whatsnew/node6.html. результатом "разборок" стал следующий код (взятый по приведённой ссылке и слегка модифицированный):
| Код | def sig (*types) : def deco (f) : def wrap (*args) : assert len (args) == len (types) cond = [isinstance (a,t) for a,t in zip (args, types)] assert cond == filter (None, cond) return f (*args) return wrap return deco |
функция sig написана специально чтобы быть декоратором. её назначение - объявлять типы параметров, принимаемых функцией. так что кто скучает по Си, можете теперь писать что-то вроде:
| Код | @ sig (int, int) def intsum (x,y) : return x+y |
| Код | >>> intsum (3,4) 7 >>> intsum (3.14,4)
Traceback (most recent call last): File "<pyshell#73>", line 1, in -toplevel- intsum (3.14,4) File "C:/Documents and Settings/mgurevich/Desktop/sig.py", line 6, in wrap assert cond == filter (None, cond) AssertionError |
с использованием sig внутри классов будут трудности, потому что в пределах объявления классы не знают своего имени. |