function operators

Delaney, Timothy tdelaney at avaya.com
Tue Nov 27 04:22:25 CET 2001


> From: Terry Reedy [mailto:tjreedy at home.com]
> "Hans Nowak" <wurmy at earthlink.net> wrote in message
>
> Does 2.2 allow one to inherit from type 'function'?  So one could do
> this without extra level on indirection?

# 2.2b1

from __future__ import nested_scopes

class ComposableFunction(function):

    def __init__(self, f):
        self.f = f

    def __call__(self, *args, **kwargs):
        return apply(self.f, args, kwargs)

    def __add__(self, other):
        assert isinstance(other, ComposableFunction)
        def glue(*args):
            return self.f(*args) + other.f(*args)
        return ComposableFunction(glue)

NameError: name 'function' is not defined

from __future__ import nested_scopes
from types import FunctionType as function

class ComposableFunction(function):

    def __init__(self, f):
        self.f = f

    def __call__(self, *args, **kwargs):
        return apply(self.f, args, kwargs)

    def __add__(self, other):
        assert isinstance(other, ComposableFunction)
        def glue(*args):
            return self.f(*args) + other.f(*args)
        return ComposableFunction(glue)

TypeError: type 'function' is not an acceptable base type

So, no.

Whether it should or not is another question of course ... :)

Tim Delaney




More information about the Python-list mailing list