Voglio definire classi di peso leggero che dovrebbero rappresentare strutture di dati. Come nel caso di molte strutture di dati, l'ordine dei dati è importante. Quindi, se vado avanti e definire questo:Come ottengo l'ordine di definizione degli attributi di classe in Python?
class User(DataStructure):
username = StringValue()
password = StringValue()
age = IntegerValue()
Io sto dicendo che questa è una struttura dati in cui una stringa con il nome utente viene prima, seguito da una stringa con la password, e, infine, l'età dell'utente come un numero intero
Se hai familiarità con Python, saprai che la classe precedente, User
, è un oggetto che eredita da type
. Sarà, come la maggior parte degli altri oggetti in Python, avere uno __dict__
. E qui, nel mio problema. Questo __dict__
è una mappa hash, quindi l'ordine degli attributi di classe nello __dict__
non è in alcun modo correlato al loro ordine di definizione.
Esiste un modo per determinare l'ordine di definizione effettivo? Mi sto chiedendo qui prima di andare con uno dei metodi meno sane di mente mi viene in mente ...
Oh, e Giusto per essere chiari, quello che voglio è un modo per ottenere questo fuori della definizione di cui sopra: ['username', 'password', 'age']
Per avere un riferimento, la mia soluzione "meno sana di mente": Avere un contatore che sale ogni volta che una classe '* Value' viene creata un'istanza e impostare il nuovo valore a tale istanza , quindi ordina l'elenco di attributi con questo valore. Questo sarebbe fatto usando una meta-classe. – Blixt
L'uso di una metaclass sulla falsariga di ciò che hai descritto qui è l'unica cosa che mi è venuta in mente. –
beh, il contatore è il modo in cui è stato fatto dal team di Django, quindi sarei abbastanza sicuro che questo è il modo migliore per farlo. –