Jeśli mam skrypt, który definiuje klasę:Jak rozpakować obiekt, którego klasa istnieje w innym obszarze nazw (python)?
script = """
class myClass:
def __init__(self):
self.name = 'apple'
self.color = 'green'
"""
a następnie Exec tego skryptu w swojej własnej przestrzeni nazw dict:
NS = {}
exec script in NS
a następnie utworzyć instancję klasy i marynowane go:
a = NS['myClass']()
import pickle
save = pickle.dumps(a)
teraz, gdy próbuję go unpickle:
load = pickle.loads(save)
pojawia się błąd
AttributeError: 'module' object has no attribute 'myClass'
wnoszę, że to nie działa, ponieważ Python nie wie, gdzie znaleźć myClass aby odbudować obiekt. Ale myClass istnieje w dyktaturze NS. Czy istnieje sposób, aby powiedzieć pickle, gdzie znaleźć klasę dla ładowanego obiektu?
To wszystko jest bardzo zadbane, ale jak to odebrać oryginalne pytanie? –
@JohnY Możesz sprawić, by klasa została rozpakowana w instancję dowolnej klasy z przestrzeni nazw rozpakowacza. Ustawiasz 'myClass', aby rozpakować jako' foomodule.myClass', a następnie wypowiadasz 'foomodule.myClass = NS ['myClass']' przed wywołaniem 'pickle.loads'. – Borealid