Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > accepts decorator

Reply
Thread Tools

accepts decorator

 
 
urielka
Guest
Posts: n/a
 
      09-25-2006
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

 
Reply With Quote
 
 
 
 
urielka
Guest
Posts: n/a
 
      09-26-2006
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

 
Reply With Quote
 
 
 
 
Gabriel Genellina
Guest
Posts: n/a
 
      09-26-2006
At Monday 25/9/2006 21:58, urielka wrote:

>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...mentation.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

 
Reply With Quote
 
urielka
Guest
Posts: n/a
 
      09-26-2006
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(notene get parameters and
the other doesn`t)

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Why doesnt __getattr__ with decorator dont call __get_method in decorator glomde Python 5 03-29-2007 02:48 PM
PIX515 v.6.2(2) accepts IPSec NAT? Sur Cisco 1 11-22-2005 10:41 AM
Custom Control That Accepts Inline Code =?Utf-8?B?SldoaXR0ZWQ=?= ASP .Net 1 11-02-2004 08:33 PM
Checking Whether a Browser Accepts Cookies rsindall@zethics.com ASP .Net 1 10-08-2004 07:15 AM
Using viewstate Accepts data changes :< Egbert Nierop \(MVP for IIS\) ASP .Net 0 08-20-2003 03:53 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57