'Add one or more functions to the set of exposed functions.
This is a way to declare something about a class definition, similar to
L{zope.interface.declarations.implementer}.  Use it like this::
magic = Expose(\'perform extra magic\')
class Foo(Bar):
def twiddle(self, x, y):
def frob(self, a, b):
magic(twiddle, frob)
Later you can query the object::
aFoo = Foo()
magic.get(aFoo, \'twiddle\')(x=1, y=2)
The call to C{get} will fail if the name it is given has not been
exposed using C{magic}.
@param funcObjs: One or more function objects which will be exposed to
the client.
@return: The first of C{funcObjs}.'

def __call__(self, *funcObjs):

    if (not funcObjs):
        raise TypeError('expose()    takes    at    least    1    argument    (0    given)')
    for fObj in funcObjs:
        fObj.exposedThrough = getattr(fObj, 'exposedThrough', [])
        fObj.exposedThrough.append(self)
    return funcObjs[0]
