how to assert that method accepts specific types
Terry Reedy
tjreedy at udel.edu
Fri Feb 20 20:48:37 EST 2009
Darren Dale wrote:
> I would like to assert that a method accepts certain types. I have a
> short example that works:
>
> from functools import wraps
>
> def accepts(*types):
> def check_accepts(f):
> @wraps(f)
> def new_f(self, other):
> assert isinstance(other, types), \
> "arg %r does not match %s" % (other, types)
> return f(self, other)
> return new_f
> return check_accepts
>
> class Test(object):
>
> @accepts(int)
> def check(self, obj):
> print obj
>
> t = Test()
> t.check(1)
>
> but now I want Test.check to accept an instance of Test as well. Does
> anyone know how this can be accomplished? The following class
> definition for Test raises a NameError:
>
> class Test(object):
>
> @accepts(int, Test)
> def check(self, obj):
> print obj
Because Test does not exist at the time the function is compiled.
Remove '@accepts...' and put Test.check = accepts(int, Test)(Test.check)
after the class definition and it should work.
tjr
More information about the Python-list
mailing list