spell method chaining?

Robin Becker robin at jessikat.fsnet.co.uk
Fri Jun 8 14:43:47 EDT 2001


In article <3B2111FF.D998EEE4 at letterror.com>, Just van Rossum
<just at letterror.com> writes
....
>s inheriting it)
>
>You can avoid that by spelling it like this:
>
>def gen(B):
>   class W(B):
>      __base = B
>      def __init__(self):
>         self.__base.__init__(self)
>   return W
>
>Just
this nearly works fine in 2.1 if I have a from __future__ import
nested_scopes, but gives a shadowed variable warning if not. In any case

from __future__ import nested_scopes
def gen(B):
        class W(B):
                __base = B
                def __init__(self):
                        self.__base.__init__(self)
        return W

class C:
        def __init__(self):
                pass

gen(gen(C))()

recurs infinitely. In 2.1 with nested scopes my original formulation is
OK,
 

from __future__ import nested_scopes
def gen(B):
        class W(B):
                def __init__(self):
                        B.__init__(self)
        return W

class C:
        def __init__(self):
                pass

gen(gen(C))()

but the following gives a compile error for some reason.

from __future__ import nested_scopes
def gen(B):
        class W(B):
                __base=B
                def __init__(self):
                        B.__init__(self)
        return W

class C:
        def __init__(self):
                pass

from __future__ import nested_scopes
def gen(B):
        class W(B):
                __base=B
                def __init__(self):
                        B.__init__(self)
        return W


Fatal Python error: non-string found in code slot

abnormal program termination


-- 
Robin Becker



More information about the Python-list mailing list