[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