У меня такая настройка
# main.py
class A:
def __init__(self, name) -> None:
self.name = name
def __enter__(self):
globals()[self.name] = self
return self
def __exit__(self, exec_type, exec_value, traceback) -> bool:
return False
with A('foo'): pass
print(foo)
хотя Пайланс и кричит на меня: «Это работает, и я вижу, что foo существует». но если я разделю код, например
# ./src/module_name/fileA.py
class A:
def __init__(self, name: str) -> None:
self.name: str = name
def __enter__(self):
globals()[self.name] = self
return self
def __exit__(self, exec_type, exec_value, traceback) -> bool | None:
return None
и
# ./tests/test_fileA.py
from module_name.fileA import A
with A('foo'): pass
print(foo)
выдает ошибку NameError: имя 'foo' не определено
что я могу сделать?
мне не нужен такой синтаксис, как у A('foo') как foo: pass
Я использую Python3.11 в Ubuntu 20.04, пытаюсь создать свой первый пакет Python.
Если возможно, пожалуйста предложите питонический способ сделать это
РЕДАКТИРОВАТЬ: -
принимая во внимание предложения, я хотел добавить некоторый контекст
я хотел создать динамический генератор пространства имен, например
with A('foo'):
class B: pass
def c():pass
foo.add(B)
foo.add(c)
foo.B()
foo.c()
Подробнее здесь: https://stackoverflow.com/questions/783 ... xt-manager