Grazie della risposta @GlennHk, riguardo :
Occhio quando fai roba del genere, perché se non ricordo male l'istanza ti viene reinizializzata ogni volta.
Me ne ero accorto, proprio quel punto mi stava suonando come un tamburo, ci giravo attorno senza veder soluzione sino alla Tua imbeccata :
...Un modo per gestire la cosa è "staccare" __init__ dalla classe, invocarlo solo sull'istanza appena creata e mai più.
Che mi ha dato una ispirazione che sembra funzionare : non ci metto proprio lo "__init__" ... spero non sia di disturbo se chiedo un parere sul codice che segue :
# -*- coding: utf-8 -*-
import datetime
import os
class LogsWriter:
''' Scrive dei messaggi nel corrente file di log '''
__instance = None
def __new__(cls, logdir: str=''):
if cls.__instance is None:
cls.__instance = super(LogsWriter, cls).__new__(cls)
cls.log_dir = logdir
date = datetime.datetime.now()
year = date.year
name = f'Projects_{year}.log'
f_name = os.path.join(logdir, name)
cls.logname = f_name
return cls.__instance
def make_log(self, msg: str) -> None:
date = datetime.datetime.now()
m = date.strftime('%Y-%m-%d_%H:%M:%S') + '- ' + msg + '\n'
with open(self.logname, 'a') as f:
f.write(m)
Come è evidente è un semplicissimo scrivano per messaggi di log, e con l'implementazione su pare funzionare bene, si inizializza al primo uso ed a istanze successive i riferimenti rimangono e non vengono modificati neanche inserendo nuovi parametri ...
from logswriter2 import LogsWriter
dirname = '/home/nuzzopippo/tmp'
log1 = LogsWriter(dirname)
log1.logname
'/home/nuzzopippo/tmp/Projects_2022.log'
log2 = LogsWriter()
log2.logname
'/home/nuzzopippo/tmp/Projects_2022.log'
log1.make_log('Test da log1')
log2.make_log('Test da log2')
log3 = LogsWriter('/home/nuzzopippo/Documenti')
log3.logname
'/home/nuzzopippo/tmp/Projects_2022.log'
Ci ho dormito poco 'sta notte (a consultare docs) però il risultato che cercavo sembra raggiunto, e sembra che ora posso procedere per singleton più complessi che avevo in mente dato che al momento non vedo controindicazioni ... ma non mi dispiacerebbe un parere più capace sull'approccio.
In ogni caso, grazie ancora
