Problem/bug with class definition inside function definition
Alexey Muranov
alexey.muranov at gmail.com
Mon May 7 18:02:34 EDT 2018
I have discovered the following bug or problem: it looks like i am
forced to choose different names for class attributes and function
arguments, and i see no workaround. Am i missing some special syntax
feature ?
Alexey.
---
x = 42
class C1:
y = x # Works
class C2:
x = x # Works
# ---
def f1(a):
class D:
b = a # Works
return D
def f2(a):
class D:
a = a # Does not work <<<<<
return D
def f3(a):
class D:
nonlocal a
a = a # Does not work either <<<<<
return D
# ---
def g1(a):
def h():
b = a # Works
return b
return h
def g2(a):
def h():
a = a # Does not work (as expected)
return a
return h
def g3(a):
def h():
nonlocal a
a = a # Works
return a
return h
# ---
if __name__ == "__main__":
assert C1.y == 42
assert C2.x == 42
assert f1(13).b == 13
try:
f2(13) # NameError
except NameError:
pass
except Exception as e:
raise Exception( 'Unexpected exception raised: '
'{}'.format(type(e).__name__) )
else:
raise Exception('No exception')
try:
f3(13).a # AttributeError
except AttributeError:
pass
except Exception as e:
raise Exception( 'Unexpected exception raised: '
'{}'.format(type(e).__name__) )
else:
raise Exception('No exception')
assert g1(13)() == 13
try:
g2(13)() # UnboundLocalError
except UnboundLocalError:
pass
except Exception as e:
raise Exception( 'Unexpected exception raised: '
'{}'.format(type(e).__name__) )
else:
raise Exception('No exception')
assert g3(13)() == 13
More information about the Python-list
mailing list