I C# lo facciamo attraverso il riflesso. In Javascript è semplice come:Come enumerare le proprietà di un oggetto in Python?
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
come farlo in Python?
I C# lo facciamo attraverso il riflesso. In Javascript è semplice come:Come enumerare le proprietà di un oggetto in Python?
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
come farlo in Python?
for property, value in vars(theObject).iteritems():
print property, ": ", value
essere consapevoli che in alcuni rari casi c'è una proprietà __slots__
, tali classi spesso non hanno __dict__
.
ora come modificare il valore? in Javascript puoi fare: object [proprietà] = newValue. Come farlo in Python? –
Ho capito: objectName .__ dict __ [propertyName] = newValue –
usa invece setattr(). – Nelson
dir()
è il modo semplice. Vedi qui:
Qualcosa da notare dai documenti Python, perché dir() viene fornito principalmente come utilità per l'uso a un prompt interattivo, tenta di fornire un insieme interessante di nomi più di quello che prova a fornire un insieme di nomi rigorosamente o coerentemente definito, e il suo comportamento dettagliato potrebbe cambiare tra le versioni. Ad esempio, gli attributi metaclass non si trovano nell'elenco dei risultati quando l'argomento è una classe._ – skyler
La __dict__
proprietà dell'oggetto è un dizionario di tutte le altre proprietà definite. Si noti che le classi Python possono sovrascrivere getattr e creare oggetti simili a proprietà ma non in __dict__
. Ci sono anche le funzioni integrate vars()
e dir()
che sono diverse in modi sottili. E __slots__
può sostituire __dict__
in alcune classi insolite.
Gli oggetti sono complicati in Python. __dict__
è il posto giusto per iniziare la programmazione in stile riflesso. dir()
è il punto da cui partire se si sta facendo un giro in una shell interattiva.
'print vars .__ doc__' indica che' Con un argomento, equivalente all'oggetto .__ dict__' Quindi quali sarebbero le differenze sottili? –
Vedere inspect.getmembers(object[, predicate])
.
Restituisce tutti i membri di un oggetto in un elenco di coppie (nome, valore) ordinate per nome. Se viene fornito l'argomento del predicato facoltativo, vengono inclusi solo i membri per i quali il predicato restituisce un valore reale.
>>> [name for name,thing in inspect.getmembers([])]
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__',
'__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__','__reduce_ex__',
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__',
'__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index',
'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
Sì, questa risposta è ottima; mai usato questo modulo prima. getmembers() è implementato semplicemente camminando i risultati di dir (oggetto), btw. – Nelson
Puoi spiegare perché è meglio che accedere a __dict__? La documentazione di Python è meno che utile, specialmente perché normalmente usa il termine 'attributes' invece di' members' (c'è qualche differenza tra i due?). Avrebbero potuto correggere il nome in Python 3.0 per renderlo coerente. – nikow
Oops, significa '__dict__', mi spiace. – nikow
Georg Scholly più breve versione
print vars(theObject)
Se siete in cerca di riflessione di tutte le proprietà, le risposte di cui sopra sono grandi.
Se si sta semplicemente cercando di ottenere le chiavi di un oggetto, utilizzare
my_dict.keys()
my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' }
my_dict.keys()
> ['abc', 'def', 'ghi']
deve essere accettato risposta – danday74
anche se è la mia risposta, non penso che dovrebbe essere la risposta accettata: le chiavi di un oggetto sono diverse dalla proprietà di un'istanza di oggetto di una classe. Sono accessibili in modo diverso ('obj ['key']' vs. 'obj.property') e la domanda riguardava le proprietà dell'oggetto. Ho messo la mia risposta qui perché c'è una facile confusione tra i due. – MrE
collegando questo: [? Come si ottiene la lista dei metodi in una classe Python] (http: //stackoverflow.com/questions/1911281/how-do-you-get-list-of-methods-in-a-python-class) –