Come utilizzare i dati di dati in Python

Come utilizzare i dati di dati in Python
Questo articolo coprirà una guida sull'uso dei nuovi oggetti "dataclass" inclusi in Python 3.7 e versioni più recenti. I dati di dati sono proprio come altre classi di Python, ma sono particolarmente progettati per essere utilizzati come contenitori di dati e forniscono una sintassi più pulita e più breve per la creazione rapida di dati di dati. Se conosci gli oggetti "denominati" e li hai usati in Python, puoi definirli come oggetti di tipo mutabile denominati. È possibile creare nuove istanze di dati di dati come qualsiasi altra classe o oggetti di tipo denominati e accedere ai loro attributi usando la notazione dot.

Sintassi di base e utilizzo

Per comprendere un dataclass e la sua sintassi, è necessario comprendere prima il layout e la struttura di base di una classe Python. Di seguito è riportato un esempio che mostra una semplice classe Python:

Stockinhand di classe:
def __init __ (self, mele, arance, mango):
se stesso.mele = mele
se stesso.arance = arance
se stesso.manghi = mango
Stock = StockInhand (40, 50, 60)
Stampa (stock.mele, stock.arance, stock.mango)

Nel campione di codice sopra, una nuova classe chiamata "Stockinhand" è stata creata con un metodo "__init__" definito al suo interno. Il metodo __init__ viene automaticamente invocato ogni volta che si crea una nuova istanza di classe StockInhand. In questo caso, il metodo __init__ è stato definito con alcuni argomenti obbligatori. Quindi, non è possibile creare una nuova istanza di stockinhand senza alcuni valori per gli argomenti necessari. L'argomento "self" fornisce un riferimento all'istanza di una classe, quindi puoi usarlo per fare riferimento a qualsiasi variabile o metodo all'interno di una classe purché queste variabili e metodi siano stati definiti facendo uso dell'argomento di sé. L'argomento di sé funge da strumento di convenienza e può essere nominato qualsiasi cosa. Puoi anche ometterlo completamente. Nelle ultime due dichiarazioni, viene creata una nuova istanza di classe Stockinhand e le sue variabili si accedono utilizzando la notazione Dot.

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

40 50 60

La stessa classe può essere definita utilizzando DataClass come segue:

da dataclasses import dataclass
@DataClass
Stockinhand di classe:
mele: int
Arance: int
Mango: int
Stock = StockInhand (40, 50, 60)
Stampa (stock.mele, stock.arance, stock.mango)

La prima istruzione importa il decoratore "DataClass" dal modulo "DataClasses". I decoratori possono essere usati per modificare il comportamento degli oggetti Python senza effettivamente cambiarli. In questo caso, il decoratore di dataclass è predefinito e proviene dal modulo DataClasses. Per definire un dataclass, è necessario allegare il decoratore del dataclass usando il simbolo "@" a una classe Python, come mostrato nel campione di codice sopra. Nelle successive poche dichiarazioni, le variabili nel dataclass sono definite utilizzando i suggerimenti di tipo per indicare quale tipo di oggetto sono. I suggerimenti di tipo sono stati introdotti in Python 3.6 e sono definiti usando i simboli "(colon). È possibile creare una nuova istanza di dataclass come qualsiasi altra classe Python. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

40 50 60

Si noti che se un metodo in dataclass restituisce un valore, è possibile assegnarlo un suggerimento di tipo usando il simbolo "->". Ecco un esempio:

da dataclasses import dataclass
@DataClass
Stockinhand di classe:
mele: int
Arance: int
Mango: int
def total_stock (self) -> int:
Restituisci se stessi.mele + self.Arance + Self.mango
Stock = StockInhand (40, 50, 60)
Stampa (stock.total_stock ())

È stato creato un nuovo metodo chiamato "total_stock" e è stato assegnato un suggerimento di tipo che utilizza la parola chiave riservata "int" per indicare il tipo di valore di restituzione. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

150

Le variabili negli oggetti DataClass possono avere valori predefiniti

È possibile assegnare i valori predefiniti ai membri dei dati di dati dopo i suggerimenti di tipo. Ecco un esempio:

da dataclasses import dataclass
@DataClass
Stockinhand di classe:
mele: int = 40
arance: int = 50
manghi: int = 60
def total_stock (self) -> int:
Restituisci se stessi.mele + self.Arance + Self.mango
stock = stockinhand ()
Stampa (stock.total_stock ())

Nella seconda dichiarazione, non sono stati forniti argomenti durante la creazione di una nuova istanza di dataclass di StockInhand, quindi sono stati utilizzati valori predefiniti. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

150

I membri del dataclass sono mutabili

I dati dei dati sono mutabili, quindi è possibile modificare il valore dei suoi membri ottenendo un riferimento ad essi. Di seguito è riportato un esempio di codice:

da dataclasses import dataclass
@DataClass
Stockinhand di classe:
mele: int = 40
arance: int = 50
manghi: int = 60
def total_stock (self) -> int:
Restituisci se stessi.mele + self.Arance + Self.mango
stock = stockinhand ()
azione.mele = 100
Stampa (stock.total_stock ())

Il valore della variabile delle mele è stato modificato prima di chiamare il metodo Total_stock. Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

210

Creazione di un dataclass da un elenco

È possibile creare un dataclass a livello di programmazione utilizzando il metodo "make_dataclass", come mostrato nel campione di codice seguente:

Importa dati di dati
campi = [("mele", int, 40), ("arance", int, 50), ("mango", int, 60)]
Stockinhand = dataclasses.make_dataclass (
"Stockinhand", Fields,
namespace = 'total_stock': lambda self: self.mele + self.Arance + Self.mango
)
stock = stockinhand ()
azione.mele = 100
Stampa (stock.total_stock ())

Il metodo Make_DataClass prende un nome di classe e un elenco di campi membri come due argomenti obbligatori. È possibile definire i membri come un elenco di tuple in cui ogni tupla contiene il nome della variabile, il suo suggerimento di tipo e il suo valore predefinito. Non è richiesto la definizione del valore predefinito, è possibile omettilo per assegnare alcun valore predefinito. L'argomento Opzionale dello spazio dei nomi prende un dizionario che può essere utilizzato per definire le funzioni dei membri utilizzando le coppie di valore chiave e le funzioni Lambda. Il codice sopra è esattamente equivalente a definire manualmente la seguente dataclass:

da dataclasses import dataclass
@DataClass
Stockinhand di classe:
mele: int = 40
arance: int = 50
manghi: int = 60
def total_stock (self):
Restituisci se stessi.mele + self.Arance + Self.mango
stock = stockinhand ()
azione.mele = 100
Stampa (stock.total_stock ())

Dopo aver eseguito i due campioni di codice sopra, è necessario ottenere il seguente output:

210

Perché utilizzare un dataclass anziché una classe?

Potresti chiederti perché utilizzare i dati di dati se sono quasi uguali alle altre classi di Python? Uno dei principali vantaggi dell'utilizzo di dati è la sua concisione. È possibile creare dati di dati utilizzando shorthands puliti e minimi senza molto codice a placca caldaia. Sono particolarmente progettati per essere utilizzati come contenitori di dati in cui è possibile accedere alle variabili utilizzando la notazione punto, sebbene sia possibile utilizzare i dati di dati come classi a pieno titolo. In termini semplici, se si desidera utilizzare una classe Python solo per usarla come archivio di dati, il dataclass sembra essere una scelta migliore.

Conclusione

I dati di dati in Python forniscono un modo minimo per creare rapidamente classi di Python destinate a essere utilizzate come negozi di dati. È possibile ottenere riferimenti ai membri di dati di dati utilizzando la notazione punto e sono particolarmente utili quando si cercano dizionari come le coppie di valore chiave a cui è possibile accedere utilizzando la notazione DOT.