Bonjour à tous
J'ai deux questions qui se rejoignent donc je vais les poser ensemble
Q1: Quelle est la bonne façon d'appeler une méthode statique de classe. Faut-il appeler self.xxx() ou classe.xxx() ?
Exemple
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #!/usr/bin/env python # -*- coding: utf-8 -*- class toto(object): @staticmethod def xxx(n): return n**2 def __init__(self): pass def action1(self, n): return toto.xxx(n) + self.xxx(n) #class toto a=toto() print a.action1(5)
Dans la méthode "action1", l'appel à toto.xxx() ou self.xxx() produisent le même appel à la méthode statique xxx(). Donc y a-t-il une différence invisible ou plus simplement une façon plus préférentielle d'appeler "xxx()" ???
Q2: Pourquoi la même façon de faire ne fonctionne plus avec une lambda ?
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #!/usr/bin/env python # -*- coding: utf-8 -*- class toto(object): @staticmethod def xxx(n): return n**2 yyy=lambda x, y: "[%s] [%s]" % (x, y) def __init__(self): pass def action1(self, n): return toto.xxx(n) + self.xxx(n) def action2(self, n): return self.yyy(self, n) def action3(self, n): return toto.yyy(self, n) # class toto a=toto() print a.action1(5) print a.action2(5) print a.action3(5)
Donc là je rajoute une lambda "yyy" qui (dans mon esprit) est aussi une méthode statique (donc pas différente de "xxx").
Déjà première chose: quand j'appelle la lambda dans "action2()" je lui passe implicitement 2 paramètres: l'instance de toto et la valeur 5. Je suis donc obligé de prévoir que ma lambda recevra un paramètre à priori inutile dans son travail. Et ce n'est plus non plus un comportement analogue à "xxx()"
Mais si ensuite je tente de l'appeler via son nom de classe (comme j'ai fait pour "xxx"), ben ça plante en me répondant que la lambda doit recevoir une instance de toto.
Bref en fait j'ai l'impression qu'une méthode statique n'est pas vraiment statique en fait... ou alors c'est la lambda...
Merci de votre retour...
Partager