Affichage noms classes heritees

Affichage noms classes heritees - Python - Programmation

Marsh Posté le 04-08-2006 à 16:30:57    

Salut,
 
   Je ne suis plus trop nouvelle e python, mais des fois ca arrive de ne rien trouver de ce qu'il me faut.
 
   J'ai besoin d'afficher l'arbre d'ehritag d'une classe et j'ai trouve une solution trop ...pas elegante apres plusieurs essis de manipulationde l'attribut __bases__ ....ce que j'avais compris etait que celui la donne la liste ( un 'tuple ' plutot) des classes heritees, quand on l'appelle par nomClasse.__bases__ ou nomClasse.__class__.__bases__
 
   Mais pour moi ca renvoie toujours une liste vide  :( ...
 
   Alors je l'ai fait a la primitive: dans chaque classe j'ai mis  en dehors des methodes un :
     
     parent= ParentClassName.parent+ ' --> ChildClassName'
 
   Ca marche biensur quand on affiche a la fin, mais il faut faire attention a  comment on affiche le string de sortie car il y a plusieurs branches et si on veut comprendre exactement l'arborescence...il faut un peu d'esthetique...
 
     Est-ce que qqn sait ou a fait un truc pareil..mais plus genial que moi?????   ca serait tres uitile SVP.
 
    Merci bien et...programmez a fond pour un monde meilleur   :hello:

Reply

Marsh Posté le 04-08-2006 à 16:30:57   

Reply

Marsh Posté le 05-08-2006 à 17:58:56    

Code :
  1. def superTree(cls, level=0):
  2.     print "%s%s"%("    "*level, cls.__name__)
  3.     for c in cls.__bases__:
  4.         superTree(c, level+1)


Demo:

Code :
  1. >>> class Foo(object): pass
  2.  
  3. >>> class Bar(list): pass
  4.  
  5. >>> class Baz(object): pass
  6.  
  7. >>> class Buzz(Foo, Bar, Baz): pass
  8.  
  9. >>> class Foobar(Buzz, dict): pass
  10.  
  11. >>> class Bizz(object): pass
  12.  
  13. >>> class Foobar(Buzz, Bizz): pass
  14.  
  15. >>> superTree(Foobar)
  16. Foobar
  17.    Buzz
  18.        Foo
  19.            object
  20.        Bar
  21.            list
  22.                object
  23.        Baz
  24.            object
  25.    Bizz
  26.        object


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-08-2006 à 12:27:54    

Merci bien :d

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed