tiens  je suis tombé  sur un article qui tombe à pic :
http://sametmax.com/mais-qui-donc-herite-de-ma-classe/

Je me suis dit que ça pourrait intéresser quelques geeks de savoir comment 
lister les enfants d'une classe, récursivement.Pas une question que l'on se 
pose souvent, à moins d'avoir une lib qui expose une classe avec beaucoup 
d'introspection. 

Ceci dit pour la culture G, je me suis dit que ça pourrait intéresser quelques 
geeks de savoir comment lister les enfants d'une classe, récursivement. 

def subclasses(cls, _found=()): 

""" Retourne toutes les classes héritant d'une classe """ 

# On check que la classe est hérite bien de "object". 

# Utile uniquement pour un code 2.x qui utiliserait 

# des old style classes, qui n'ont pas "__subclasses__". 

if not isinstance(cls, type): 

raise TypeError('subclasses works only with new-style classes' 

', not %s' % cls) 

# On va stocker les classes rencontrées dans un set 

# pour éviter les doublons car on peut tomber sur 

# un héritage en forme de diamant. 

_found = _found or set() 

try: 

subs = cls.__subclasses__() 

except TypeError: # Erreur levée si cls == type, petits vicieux 

subs = cls.__subclasses__(cls) 

for sub in subs: 

if sub not in _found: 

_found.add(sub) 

# Un appel récursif comme on les aimes 

subclasses(sub, _found) 

return _found 

Pas très compliqué, donc, si on connait les piègeounets : ça ne marche pas sur 
les old syle classes, et il y a un traitement spécial pour type. Celà dit, qui 
utilise encore des old styles classes ? Et franchement lister les héritiers de 
type, à par pour satisfaire sa curiosité. 

Aller, juste pour le fun, sur un virtualenv vierge: 

for x in subclasses(object): 

print x 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

## 

Putain, ça c'est du remplissage ! 20minutes serait fier de moi. 

(Image= flattr this!)

Mais qui donc hérite de ma classe ?

  ----- Original Message ----- 
  From: yannick 
  To: [email protected] 
  Sent: Friday, June 20, 2014 4:25 PM
  Subject: [progliste] reponse à Paul ZikiTranslator


  bjr, désolé, impossible d'nvoyer un mail sur script NVDA, et vu que c'est 
toujours de la prog, je l'envoie ici .
  je ne pige pas quand je fais  répondre, le mail n'arrive pas .... troisième 
  essaie .
  revoici le mail :
  bjr,
  oui je  proposait un module complémentaire ,
  au début j'avais envoyé un fichier nvda-addon, et comme tu as fait remarqué
  que l'archive était endommagé, j'ai fait la facilité en envoyant le fichier 
  py .
  ci dessous je mets le nvda-addon , avec drop box cela ira mieux je pense .
  je l'ai testé et tout fonctionnne .
  quand j'envoie  sur les  listes je rajoute l'extension txt par habitude .
  j'ai donc  envoyé 2 fichier, le module et le py pour éviter des pb dû à 
  l'envoie sur l'internet .
  quand aux  gui.wx &appModuleHandler.api etc ..
  certes je me fatigue  beaucoup pour éviter des importations  multiples,
  je pourrais me faciliter la vie en important   juste les modules utiles afin 
  d'éviter des lignes à  rallonge, mais je le fais ainsi en guise 
  d'apprentissage .
  bien entendu que le script fonctionnne ,  certes
  controlTypes.ROLE_BUTTON est plus simple à écrire que :
  appModuleHandler.api.controlTypes.ROLE_BUTTON
  mais bon, j'ai juste voulu faire un choix de courageux .
  Tout fonctionnne, il faut juste comprendre pourquoi quand je fais insert +h, 
  c'est à dir ton script, la touche control+space n'apparait pas .
  je n'ai pas testé control +space dans d'autre script , mais je suppose qu'il 
  n'apparaitra pas non plus .
  https://dl.dropboxusercontent.com/u/5497034/envoie/ZikiTranslator.nvda-addon 

Répondre à