[Python] Suggerimento per creazione classe
Valerio Pachera
sirio81 a gmail.com
Sab 1 Gen 2022 23:20:08 CET
Il giorno ven 31 dic 2021 alle ore 14:25 Massimo Masson <max a 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.
-------------- parte successiva --------------
Un allegato HTML รจ stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20220101/cbabf741/attachment.html>
Maggiori informazioni sulla lista
Python