Il giorno ven 31 dic 2021 alle ore 14:25 Massimo Masson <m...@studiomasson.it> ha scritto:
> ... > Rapidamente, potresti "staticizzare" i due path nella classe, ad esempio: > > class Account(object): > src = 'sorgente_' > dst = 'destinazione_' > > ... > > poi magari cerca sui decoratori @staticmethod ed anche @classmethod. > Ma intanto credo faccia quello che hai chiesto... > > A dire il vero no, perche' i percorsi li devo definire al di fuori della classe. Mi sono rinfrescato la memoria sui name space, class variables and class methods grazie al mitico Corey Shafer e ho trovato la risposta :-) https://www.youtube.com/watch?v=ZDa-Z5JzLYM&list=PL-osiE80TeTsqhIuOqKhwlXsIBIdSeYtc import os.path class Account(object): def __init__(self, name): self.name = name self.src_path = os.path.join(Account.src_path, self.name) self.dst_path = os.path.join(Account.dst_path, self.name) @classmethod def set_commont_paths(cls, src_path, dst_path): cls.src_path = src_path cls.dst_path = dst_path def export(self): # do many things print(f'export account {self.name} from {self.src_path} to {self.dst_path}') Account.set_commont_paths('/opt/', '/mnt/backups') instance = Account('john.doe') instance.export() instance = Account('someone') instance.export() risultato: export account john.doe from /opt/john.doe to /mnt/backups/john.doe export account someone from /opt/someone to /mnt/backups/someone I punti chiave sono: - aver usato il nome della classe Account nel metodo __init__ in da leggere la variabile al di fuori dello scope della funzione/metodo. - aver creato un class method che modifica le variabili di classe. Notare che prima di istanziare degli account, devo per forza richiamare il class method Account.set_commont_paths, altrimenti al costruttore mancheranno le variabili di classe.
_______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python