Portál AbcLinuxu, 13. května 2025 02:57

Dotaz: Python: jak zmapovat iniciovane objekty?

23.10.2015 20:42 zdenek2008 | skóre: 26
Python: jak zmapovat iniciovane objekty?
Přečteno: 470×
Odpovědět | Admin
Mam iniciovane objekty dvou kategorii, jedny jsou nejake objekty a ty druhe vyjadruji souvztaznost mezi temi prvnimi. Napriklad objekt A, objekt B a potom objekt C ktery obsahuje (krome jineho) 2 fields (promenne tridy): z_bodu='A' , do_bodu='B'. Objektu je libovolny pocet, ale zadny neni plonkovy, kazdy je propojen s jinym(i) pomoci tech spojovacich objektu. Problem mam ale s tim, ze bych potreboval namapovat ty souvztaznosti; asi bych potreboval ziskat seznam momentalne iniciovanych objektu a u kazdeho zjistit jestli obsahuje field ktery obsahuje jmeno kterehokoliv z ostatnich objektu; takhle bych proiteroval vse a skoncil bych s pomyslnou mapou propojeni objektu. Zacal jsem s print locals() a mam dictionary se jmeny objektu, ale to je vse. Nevedeli byste nekdo jak se dostat k promennym uvnitr tech objektu?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.10.2015 20:49 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Python: jak zmapovat iniciovane objekty?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jeste musim dodat ze na kazdy objekt muzu pouzit dir(objekt), ale locals() neni iterable, takze nevim jak to projit.
Řešení 1× (zdenek2008 (tazatel))
23.10.2015 21:28 chrono
Rozbalit Rozbalit vše Re: Python: jak zmapovat iniciovane objekty?
Dá sa prejsť cez tie názvy, čo vráti dir a potom sa môže použiť getattr (a napr. globélne premenné sa dajú získať pomocou vars).

PS: Nemôžem si ale pomôcť, ale ukladať to do náhodných premenných a potom sa pokúšať to prepojiť pomocou nejakej mágie mi nepríde ako najrozumnejší spôsob.
23.10.2015 21:45 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Python: jak zmapovat iniciovane objekty?
Diky za tip. Jinak, jaky je ten nejlepsi zpusob, abych ho mohl ihned nasadit a vyhnout se dalsimu bloudeni?
Řešení 1× (zdenek2008 (tazatel))
rADOn avatar 27.10.2015 15:47 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Python: jak zmapovat iniciovane objekty?
Odpovědět | | Sbalit | Link | Blokovat | Admin
a potom objekt C ktery obsahuje (krome jineho) 2 fields (promenne tridy): z_bodu='A' , do_bodu='B'.
Ty apostrofy jsou tam doufam omylem.
…asi bych potreboval ziskat seznam momentalne iniciovanych objektu…
To mi zni jako seznam ktery by se mel drzet v class atributu, coz se da delat, v poradi podle sofistikovanosti:
  1. rucne v __init__(). tj neco jako self.__class__.instances.append(self)
  2. v metode __new__(), coz se da podedit do potomku
  3. metatridou
Pokud mas je jeden objekt ktery chces sledovat, tak prvni zpusob bude uplne stacit. Pokud jich je vic v nejake hierarchii tak je lepsi druhy zpusob. Metatridami se to da extremne zobecnit ale je to relativne komplikovane a pro pajtni zacatecniky i dost nesrozumitelne.

BTW ten priklad neber doslova, kdyz budes pouzivat primo referenci na instanci tak efektivne vyradis destrukci. Musel bys ten seznam instanci rucne cistit, lepsi bude pouzit modul weakref.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
24.11.2015 13:57 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Python: jak zmapovat iniciovane objekty?
Diky, vyzkousim.

Ty apostrofy jsou tam samozrejme umyslne, jen jsem testoval kdo se na ne chyti.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.