Thread View: pl.comp.lang.python
3 messages
3 total messages
Started by Ryszard G
Wed, 20 Jan 2010 11:51
pętla i atrybuty klasy
Author: Ryszard G
Date: Wed, 20 Jan 2010 11:51
Date: Wed, 20 Jan 2010 11:51
10 lines
1529 bytes
1529 bytes
Witam.
Mam klasę w której niektóre atrybuty są
inną klasą, której niektóre atrybuty itd.
jak wylistować wszyskie nie tworząc takiego potwora?
for i in g.kraj.__dict__:
print i
if getattr(g.kraj, i):
for j in getattr(g.kraj, i):
print j.__dict__ .........
Re: pętla i atrybuty klasy
Author: Stachu 'Dozzie' K.
Date: Wed, 20 Jan 2010 11:54
Date: Wed, 20 Jan 2010 11:54
17 lines
1697 bytes
1697 bytes
On 2010-01-20, Ryszard G <wg@spam.pl> wrote: > Witam. > Mam klasę w której niektóre atrybuty są > inną klasą, której niektóre atrybuty itd. > jak wylistować wszyskie nie tworząc takiego potwora? > > for i in g.kraj.__dict__: > print i > if getattr(g.kraj, i): > for j in getattr(g.kraj, i): > print j.__dict__ ......... Żeby zrozumieć rekurencję musisz najpierw zrozumieć rekurencję. -- Secunia non olet. Stanislaw Klekot
Re: pętla i atrybuty klasy
Author: Jan Kaliszewski
Date: Thu, 21 Jan 2010 02:18
Date: Thu, 21 Jan 2010 02:18
51 lines
2390 bytes
2390 bytes
On Wed, 20 Jan 2010 12:51:51 +0100, Ryszard G <wg@spam.pl> wrote:
> Witam.
> Mam klasę w której niektóre atrybuty są
> inną klasą, której niektóre atrybuty itd.
> jak wylistować wszyskie nie tworząc takiego potwora?
>
> for i in g.kraj.__dict__:
> print i
> if getattr(g.kraj, i):
> for j in getattr(g.kraj, i):
> print j.__dict__ .........
import types
class A:
"Przykladowa klasa z zagnieżdżonymi klasami/typami..."
a = 6
class B(object):
a = 3
class C:
nt = types.NoneType
st = str
s = "tralalala"
bt = bool
class Z(dict):
f = -2.
it = int
i = 3
def _przejdz_rekurencyjnie(klasa, juz_odwiedzone):
if id(klasa) in juz_odwiedzone:
return # (mogą być cykliczne referencje...)
juz_odwiedzone.add(id(klasa))
for nazwa, obiekt in klasa.__dict__.iteritems():
print nazwa # lub cokolwiek innego z nazwą lub obiektem...
if isinstance(obiekt, (type, types.ClassType)):
# typ (klasa w nowym stylu) lub klasa w starym stylu
_przejdz_rekurencyjnie(obiekt, juz_odwiedzone)
def przejdz_po_atrybutach(klasa):
_przejdz_rekurencyjnie(klasa, juz_odwiedzone=set())
przejdz_po_atrybutach(A)
Pozdr.
*j
--
Jan Kaliszewski (zuo)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads