how to assert that method accepts specific types

Chris Rebert clp2 at
Sat Feb 21 02:20:02 CET 2009

On Fri, Feb 20, 2009 at 5:12 PM, Darren Dale <dsdale24 at> 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

You're going to have to either inject it after the class definition
somehow, or give the class name as a string and use eval() or similar.
The class object doesn't exist until the entire class body has
finished executing, so you can't refer to the class within its own


Follow the path of the Iguana...

More information about the Python-list mailing list