Contamos con la solución a esta cuestión, o por lo menos eso creemos. Si tienes dudas puedes escribirlo en el apartado de comentarios y sin dudarlo te ayudaremos
Solución:
Si la “variable” a la que te refieres es un valor mutable, lo que estás pidiendo simplemente funcionará.
archivoB:
my_variable = ["a list with a string in it"]
presentar un:
from fileB import my_variable # import the value
my_variable.append("and another string")
Después fileA
ha sido cargado fileB.my_variable
tendrá dos valores en él.
Pero, eso solo funciona para valores mutables. Si la variable es inmutable, el código en fileA
no puede cambiarlo en su lugar, por lo que tendrá problemas. No hay forma de solucionarlo directamente, pero hay muchas maneras de solucionar el problema y aún así obtener lo que desea.
Lo más fácil será simplemente usar import fileB
en vez de from fileB import my_variable
. Esto te deja entrar cualquier cosa fileB
el espacio de nombres, simplemente usando un nombre como fileB.whatever
. Puede volver a vincular las cosas en el espacio de nombres al contenido de su corazón:
archivoB:
my_variable = 1 # something immutable this time
presentar un:
import fileB
fileB.my_variable = 2 # change the value in fileB's namespace
Ese es probablemente el enfoque más simple.
Otra solución sería colocar la variable inmutable dentro de un contenedor mutable y luego modificar el contenedor, en lugar de la variable. Por ejemplo, si el string "a list with a string in it"
era el valor que queríamos cambiar en el primer ejemplo, simplemente podíamos asignar un nuevo valor a my_variable[0]
(en lugar de agregar).
Una forma común de hacer esto es poner valores en un diccionario, lista o incluso en una clase (o una instancia mutable de uno). Luego puede importar el objeto contenedor y mutarlo para cambiar el valor que le interesa.