Blame tests/run/closure_class_T596.pyx

Packit 562c7a
# mode: run
Packit 562c7a
# tag: closures
Packit 562c7a
# ticket: 596
Packit 562c7a
Packit 562c7a
def simple(a, b):
Packit 562c7a
    """
Packit 562c7a
    >>> kls = simple(1, 2)
Packit 562c7a
    >>> kls().result()
Packit 562c7a
    3
Packit 562c7a
    """
Packit 562c7a
    class Foo:
Packit 562c7a
        def result(self):
Packit 562c7a
            return a + b
Packit 562c7a
    return Foo
Packit 562c7a
Packit 562c7a
def nested_classes(a, b):
Packit 562c7a
    """
Packit 562c7a
    >>> kls = nested_classes(1, 2)
Packit 562c7a
    >>> kls().result(-3)
Packit 562c7a
    0
Packit 562c7a
    """
Packit 562c7a
    class Foo:
Packit 562c7a
        class Bar:
Packit 562c7a
            def result(self, c):
Packit 562c7a
                return a + b + c
Packit 562c7a
    return Foo.Bar
Packit 562c7a
Packit 562c7a
def staff(a, b):
Packit 562c7a
    """
Packit 562c7a
    >>> kls = staff(1, 2)
Packit 562c7a
    >>> kls.static()
Packit 562c7a
    (1, 2)
Packit 562c7a
    >>> kls.klass()
Packit 562c7a
    ('Foo', 1, 2)
Packit 562c7a
    >>> obj = kls()
Packit 562c7a
    >>> obj.member()
Packit 562c7a
    (1, 2)
Packit 562c7a
    """
Packit 562c7a
    class Foo:
Packit 562c7a
        def member(self):
Packit 562c7a
            return a, b
Packit 562c7a
        @staticmethod
Packit 562c7a
        def static():
Packit 562c7a
            return a, b
Packit 562c7a
        @classmethod
Packit 562c7a
        def klass(cls):
Packit 562c7a
            return cls.__name__, a, b
Packit 562c7a
    return Foo
Packit 562c7a
Packit 562c7a
def nested2(a):
Packit 562c7a
    """
Packit 562c7a
    >>> obj = nested2(1)
Packit 562c7a
    >>> f = obj.run(2)
Packit 562c7a
    >>> f()
Packit 562c7a
    3
Packit 562c7a
    """
Packit 562c7a
    class Foo:
Packit 562c7a
        def run(self, b):
Packit 562c7a
            def calc():
Packit 562c7a
                return a + b
Packit 562c7a
            return calc
Packit 562c7a
    return Foo()