I C# robimy to poprzez odbicie. W języku Javascript jest to proste:Jak wyliczyć właściwości obiektu w Pythonie?
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
Jak to zrobić w Pythonie?
I C# robimy to poprzez odbicie. W języku Javascript jest to proste:Jak wyliczyć właściwości obiektu w Pythonie?
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
Jak to zrobić w Pythonie?
for property, value in vars(theObject).iteritems():
print property, ": ", value
Należy pamiętać, że w niektórych rzadkich przypadkach istnieje własność __slots__
takie zajęcia często nie mają __dict__
.
Teraz, jak zmienić wartość? w JavaScript można zrobić: object [property] = newValue. Jak to zrobić w Pythonie? –
Mam to: objectName .__ dict __ [propertyName] = newValue –
zamiast tego użyj setattr(). – Nelson
dir()
to prosty sposób. Zobacz tutaj:
Coś do zapamiętania z dokumentacji Pythona, ponieważ dir() jest dostarczany przede wszystkim jako udogodnienie do użycia w interaktywnym monicie, stara się dostarczyć interesujący zestaw nazw bardziej niż stara się dostarczyć ściśle lub konsekwentnie zdefiniowany zestaw nazw, a jego szczegółowe zachowanie może się zmieniać w różnych wersjach. Na przykład atrybuty metaclass nie znajdują się na liście wyników, gdy argumentem jest klasa._ – skyler
Właściwość obiektu __dict__
jest słownikiem wszystkich innych określonych właściwościach. Zauważ, że klasy Python mogą przesłonić getattr i tworzyć rzeczy, które wyglądają jak właściwości, ale nie są w __dict__
. Istnieją również wbudowane funkcje, które różnią się subtelnymi sposobami. I __slots__
może zastąpić __dict__
w niektórych niezwykłych klasach.
Obiekty są skomplikowane w Pythonie. __dict__
to właściwe miejsce do rozpoczęcia programowania w stylu refleksji. dir()
to miejsce, w którym możesz zacząć hakowanie w interaktywnej powłoce.
'drukuj vars .__ doc__' wskazuje, że' Z argumentem, równoważnym z obiektem .__ dict__' Jakie są zatem subtelne różnice? –
Zobacz inspect.getmembers(object[, predicate])
.
Powoduje zwrócenie wszystkich elementów obiektu na liście par (nazwa, wartość) posortowanych według nazwy. Jeśli podano opcjonalny argument predykatu, uwzględniane są tylko elementy, dla których predykat zwraca wartość true.
>>> [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']
>>>
Ta odpowiedź jest świetna; nigdy wcześniej nie używał tego modułu. getmembers() jest implementowany przez chodzenie po wynikach dir (object), btw. – Nelson
Czy możesz wyjaśnić, dlaczego jest to lepsze niż dostęp do __dict__? Dokumentacja w Pythonie jest mniej niż pomocna, zwłaszcza, że zwykle używa terminu "attributes" zamiast "members" (czy jest jakaś różnica między tymi dwoma?). Mogli naprawić nazwę w Pythonie 3.0, aby był spójny. – nikow
Ups, oznacza "__dict__', przepraszam. – nikow
Georg scholly krótsza wersja
print vars(theObject)
Jeśli szukasz refleksji wszystkich właściwości, odpowiedzi powyżej są świetne.
Jeśli jesteś po prostu chce dostać klucze do obiektu, użyj
my_dict.keys()
my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' }
my_dict.keys()
> ['abc', 'def', 'ghi']
należy przyjąć odpowiedź – danday74
mimo że jest to moja odpowiedź, nie sądzę, że powinna to być zaakceptowana odpowiedź: klucze obiektu różnią się od właściwości obiektu instancji klasy. Dostęp do nich jest różny ('obj ['key']' vs. 'obj.property'), a pytanie dotyczyło właściwości obiektu. Odpowiadam tutaj, ponieważ między nimi jest łatwe zamieszanie. – MrE
łącząc w ten sposób: [? Jak uzyskać listę metod w klasie Pythona] (http: //stackoverflow.com/questions/1911281/how-do-you-get-list-methods-in-a-python-class) –