🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#27239
Author: Ryszard G
Date: Wed, 20 Jan 2010 11:51
10 lines
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
#27240
Author: Stachu 'Dozzie' K.
Date: Wed, 20 Jan 2010 11:54
17 lines
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
#27241
Author: Jan Kaliszewski
Date: Thu, 21 Jan 2010 02:18
51 lines
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