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