Hogy lehet megoldani, hogy konkretan egy valtozo nevet - es nem a tartalmat - kerjem le? Mint ahogy a hibaknal is kiirja, hogy ilyen, meg olyan objektum, valtozo, vagy barmi. Valahogy csak le lehet kerni, hisz az igaz, hogy a valtozo csak egy memoriateruletre mutat, de a programban megiscsak a 'sztringhez' rendelodik a memoriacim... o_O
valtozo = "tartalom"
Ilyenkor "valtozo" igazi tartalma a memoriacim, a memoriacim pedig a "tartalom" helyet jeloli a memoriaban - na en a memoriacimhez rendelt sztringet, tehat a 'valtozot' akarom megtudni. Hogyan?
(valojaban egy konkret objektum nevet akarom megtudni, hogy hibajelzesenel hivatkozhassak ra, de mivel az is valtozo, igy gondolom ugyanolyan modszerrel lehet megtudni a nevet)
- 1409 megtekintés
Hozzászólások
Amennyire én tudom, az objektum nem tudja a saját nevét.
- A hozzászóláshoz be kell jelentkezni
Valami olyasmivel lehet próbálkozni, hogy nyilvántartod a szóba jöhető objektumok neveit, a unique id-hoz rendelve.
>>> a=1918
>>> b=1945
>>> ismert={}
>>> ismert[id(a)] = 'a'
>>> ismert[id(b)] = 'b'
>>> #someexception
... o=a
>>> ismert[id(o)]
'a'
Abba bele sem merek gondolni, hogy mondjuk a=b...
Igazából nem tudom, hogy ez az egész mihez kellene, de abban biztos vagyok, hogy valahogy máshogy kell tervezni...
- A hozzászóláshoz be kell jelentkezni
Az otlet nem rossz, de tulbonyolitott, masfelol azt szeretnem, ha az objektumon belul lenne ez a kiiratas - bar ugy nez ki, a nevet belulrol nem lehet megallapitani. Mindenesetre koszonom, hogy segitettetek!
We are the borg! :P
--
Azt akarom, hogy az emberek ne kenyszerbol tanuljanak, hanem azert, mert tudni akarnak.
Ui.: Kezdo Linux-os vagyok, emberi nyelven valaszoljatok! Koszi! :)
- A hozzászóláshoz be kell jelentkezni
Most nézve nem is értem, minek tettem bele az id() -ket.
Szóval bárhol, ahol id(Z) -t írtam, simán lehetne Z. Nem mintha ettől jobb lenne, csak gondoltam megemlítem.
- A hozzászóláshoz be kell jelentkezni
Elég, ha az tudja, ami az objektumot kezeli. :)
Amúgy jómagam csak passzív, read-only használom a pythont, de a felvetés érdekelt annyira, hogy rákeressek.
Az alábbi linken némi flame után születnek megoldásnak látszó hozzászólások.
- A hozzászóláshoz be kell jelentkezni
Igen, erre magam is ratalaltam, csak el szerettem volna kerulni a 'name' valtozo hasznalatat, de ugy nez ki, ez a legkezenfekvobb megoldas.
--
Azt akarom, hogy az emberek ne kenyszerbol tanuljanak, hanem azert, mert tudni akarnak.
Ui.: Kezdo Linux-os vagyok, emberi nyelven valaszoljatok! Koszi! :)
- A hozzászóláshoz be kell jelentkezni
Mi sem egyszerűbb! Ha global változóról van szó akkor keresgélhetsz a globals()
által visszaadott dict-ben. Ha viszont lokális változóról van szó, akkor az inspect
modullal szépen megkeresed melyik frame-ben jelenik meg először az f_locals
-ban, és akkor valószínűleg az ott szereplő név kell neked.
Mókás így megírni, de tényleg jobban jársz ha adsz nekik egy name mezőt.
- A hozzászóláshoz be kell jelentkezni
http://docs.python.org/library/symtable.html ?
persze nem tudom h ezt tudod e hasznalni barmire is, de gondoltam beirom.
hmm de ez jobb
http://www.daniweb.com/forums/thread134555.html#
a lenyeg a vars() dictionary.
- A hozzászóláshoz be kell jelentkezni
Igen, valoban ez lenne a legjobb, ha nem az objektum belsejebol akarnam megtudni a nevet. Bar, igy belegondolva, ez valoszinuleg nem lehetseges, mint ahogy pl az ember sem tudja megmondani, hogy milyen az arca, anelkul, hogy kulso segitseget (tukor) igenybe venne. Viszont hasznos ez a vars(), koszi a tippet. :)
--
Azt akarom, hogy az emberek ne kenyszerbol tanuljanak, hanem azert, mert tudni akarnak.
Ui.: Kezdo Linux-os vagyok, emberi nyelven valaszoljatok! Koszi! :)
- A hozzászóláshoz be kell jelentkezni
sztem tudod erre hasznlani, csak keresgelni kell a dict-ben.
vagy nem ertem a problemad.
- A hozzászóláshoz be kell jelentkezni
Ez amúgy mire kellene? Hirtelen egy esetet se tudok elképzelni, hogy ilyet kéne használni...
- A hozzászóláshoz be kell jelentkezni
Van egy 'ablak' osztalyom, aminek kotelezoen meg kell adni nehany attributumot, de mivel ezek nem parameterek, igy megeshet, hogy a programozo elfelejti beallitani oket. Ilyen esetben szeretnem kiirni, hogy melyik objektumon belul melyik valtozo hibazik. Na, az objektum nevenek kiirasaval van baj...
--
Azt akarom, hogy az emberek ne kenyszerbol tanuljanak, hanem azert, mert tudni akarnak.
Ui.: Kezdo Linux-os vagyok, emberi nyelven valaszoljatok! Koszi! :)
- A hozzászóláshoz be kell jelentkezni
Hmmm... Végül is erre találták ki az alapértelmezett értékeket... meg azok dokumentálását. ;)
- A hozzászóláshoz be kell jelentkezni
Az objektum tipusanak a nevet ki tudod irni. az objektum referenciajanak nevet viszont nem, es nem is lehet a programbol. (mivel akar tobb kulonbozo nevu valtozo is mutathat ugyanarra az objektumra).
Legjobb megoldas dobni ilyenkor egy AttributeError exceptiont, ilyenkor az interpreter megall, kiirja melyik sorban volt a hiba, es folfele vegig az osszes hivas pontos helyet, sorszamat, stb. Az exceptionnek megadhatsz egyedi hibauzenetet is.
Ez kell neked, masok is igy szoktak csinalni python-ban.
- A hozzászóláshoz be kell jelentkezni
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni