accepts decorator

U

urielka

i want to make a decorator that make a function accept only types,if
the types are wrong but the number of types is equal to arguments try
to convert them to the type.

for example:

@Accept(int,int)
def Sum(a,b):
return a+b

print Sum("2",2.0)

this should print 4,coz the decorator sees that there is the same
amount of arguments in Accept and Sum,then it will try to cast them to
the types(a to int and also b to int),then he will send them to the
normal function so Sum will get a=2,b=2 instead of a="2"(string)
b=2.0(float).
i made this but it doesn`t work:
def Accept(*types):
def check_accepts(f):
assert len(types) == f.func_code.co_argcount-1,"Not
Enougth/Too much Types"
Types=types
def new_f(*args, **kwds):
newArgs=[]
for (a, t) in zip(kwds.values(), Types):
try:
newArgs.append(t(a))
except:
raise Exception("Convertion of %s to type %s
failed" %(a,t))
nargs=tuple(newArgs)
return f(*nargs, **kwds)
new_f.func_name = f.func_name
return new_f
return check_accepts

it doesn`t work when i decorate a instance method.
i get in *args the instance and in **kwds the arguments,but if it is
just a function not a instance method i get in *args the arguments and
in **kwds a empty dict.

can someone also explain me what is * and ** ,and how they are called.

Thanks,
-Uriel Katz
 
U

urielka

i think i got what the * and ** mean.
*args mean arguments that are assigned by position(that is why *arg is
a tuple)
**kwds mean arguments that are assigned using equals a=2,b=3 (that is
why **kwds i a dict)
but why self is in *args and other thing goes to **kwds? even if not
assigned using equals
 
G

Gabriel Genellina

i think i got what the * and ** mean.
*args mean arguments that are assigned by position(that is why *arg is
a tuple)
**kwds mean arguments that are assigned using equals a=2,b=3 (that is
why **kwds i a dict)
but why self is in *args and other thing goes to **kwds? even if not
assigned using equals

For these elemental things you should start by reading the Python
tutorial included with the documentation - it's easy.
And for decorators, this is a good text
http://www.phyast.pitt.edu/~micheles/python/documentation.html which
supplements the Python docs.



Gabriel Genellina
Softlab SRL





__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas
 
U

urielka

hehe i saw that,that is what made my understand it.
the decorator now works.
let say i have a function decorated with two decorators:

@Accept(int,int)
@OtherDecorator
def myfunc(a,b):
pass

how can i make the two decorators into one(note:eek:ne get parameters and
the other doesn`t)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,968
Messages
2,570,150
Members
46,697
Latest member
AugustNabo

Latest Threads

Top