Зачем вы это делаете? (кроме exec)
Почему вы пытаетесь сделать это с exec
?
Кроме того, выполнение с exec
будет:
- Не работает.
- Дайте разные результаты в
python-2.x
и в python-3.x
.
* * Пример тысяча двадцать-один: * * 1 022
class demo:
a = 'a'
print(demo.a)
def start():
global demo
class demo: b = "b"
try:
print(demo.a)
except AttributeError:
print(demo.b)
if __name__ == '__main__':
start()
try:
print(demo.a)
except AttributeError:
print(demo.b)
Что либо в python-2.x
, либо в python-3.x
даст:
a
b
b
А теперь давайте попробуем это с exec
:
class demo:
a = 'a'
print(demo.a)
def start():
exec('global demo', globals(), locals())
exec('class demo: b = "b"', globals(), locals())
try:
print(demo.a)
except AttributeError:
print(demo.b)
if __name__ == '__main__':
start()
try:
print(demo.a)
except AttributeError:
print(demo.b)
Вывод python2.7
:
a
b
a
Вывод python3.2
:
a
a
a
В: Как «динамически создать класс»?
Как уже сказал kindall , exec
не способ сделать это.
A метакласс или фабрика классов делает это, но вы уверены, что это действительно нужно?