[Linux-bruxelles] [Python] Tableau de methode
Frederic Peters
fpeters at entrouvert.com
Lun 22 Nov 09:40:00 CET 2004
Eric Freyens écrivait :
Ta question était posée en ces termes:
> Question subsidiaire, existe-t-il une méthode pour obtenir la liste
> des méthodes d'une classe.
Mais en fait, ce que tu voulais, c'était avoir toutes les méthodes
*commençant par inst*, non ?
> class n51:
> def __init__(self):
> self.uP = uP51.uP51()
>
> def viewDocumentation(self):
> """View documentation of instruction"""
> lst = dir(self.uP)
> self.ilst = filter(self.isInstr,lst)
> lilst = len(self.ilst)
> print self.uP.__doc__
> for instr in self.ilst:
> doc = self.uP.__class__.__dict__[instr].__doc__
> print instr," : ", doc
> print "Nombre d'instruction :", lilst
On peut commenter sur plusieurs niveaux.
1. multiplication du nombre de variables, ce n'est pas nécessaire, par
exemple, plutôt que de faire:
llist = len(self.ilst)
[...]
print "Nombre...:", lilst
il était possible (et plus clair vu qu'il y a une variable en moins
et qu'on est tout plein à avoir de petits cerveaux) de faire:
print "Nombre...:", len(self.ilst)
2. filter() (et map()), on en déconseille maintenant l'usage, le même
résultat pouvant être obtenu avec ce qui est appelé "list
comprehension":
lst = dir(self.uP)
self.ilst = filter(self.isIntr, lst)
pourrait ainsi devenir:
self.ilst = [x for x in dir(self.uP) if self.isIntr(x)]
3. Courtes méthodes, utilisées une seule fois, plus la peine:
self.ilst = [x for x in dir(self.uP) if x.startswith('inst')]
4. Accès direct à __dict__; c'est super Python, on a accès au détail
de comment les membres/méthodes sont stockés, mais accéder à
__dict__, quand ce n'est pas absolument nécessaire, ce n'est pas
très élégant.
self.uP.__class__.__dict__[instr].__doc__
deviendrait ainsi
getattr(self.uP.__class__, instr).__doc__
5. Possibilité de manipuler des classes, pas d'obligation de passer
par des instances. Tu instancies ici ta classe uP51() mais en
fait, tu ne t'intéresses qu'au détail de la classe, tu n'as pas
besoin d'une instance.
lst = dir(self.uP)
pourrait ainsi devenir:
dir(uP51.uP51)
Et celui du point précédent:
getattr(self.uP.__class__, instr).__doc__
deviendrait:
getattr(uP51.uP51, instr).__doc__
6. Des indentations de deux espaces, c'est bien trop peu.
> Merci de votre aide.
Quelques conseils, tu en fais ce que tu veux.
Frédéric
Plus d'informations sur la liste de diffusion Linux-bruxelles