Dati due moduli, principali e x con il seguente contenuto:Condividi un singoletto attraverso moduli
principale:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
cls._instance.x = 10
return cls._instance
uvw = Singleton()
if __name__ == "__main__":
print(id(uvw))
uvw.x += 10
print(uvw.x)
import x
e X, rispettivamente:
import main
print(id(main.uvw))
print(main.uvw.x)
vorrei ora aspettare che l'esecuzione principale restituirebbe gli stessi ID e il valore venti in entrambi i casi, ma ciò che ottengo è questo:
$ python main.py
140592861777168
20
140592861207504
10
C'è un modo per garantire che lo uvw
sia lo stesso oggetto in entrambi i posti?
Si noti che l'intero punto del metodo '__new__' è di impedire all'utente di accedere a' main.uvw', poiché 'Singleton()' è garantito per restituire la stessa istanza ogni volta comunque. – Eric
Quindi 'main' sta chiamando' x' che sta chiamando 'main' ...? Questa è una ricetta per la confusione/disastro. –
possibile duplicato di [Importazione moduli: \ _ \ _ principale \ _ \ _ vs importazione come modulo] (http: // stackoverflow.it/questions/13181559/importing-modules-main-vs-import-as-module) –