Salut,
tout est dans le titre.
Toute info. est la bienvenue.
Salut,
tout est dans le titre.
Toute info. est la bienvenue.
Qu'appelles-tu méthode de classe ? Parmi quoi comme objets veux-tu comparer ?
Quelques pistes :
Une méthode (non statique) est de type 'instancemethod', alors qu'une fonction (ou une méthode statique) est du type 'function'
L'attribut 'im_self' d'une méthode décorée avec @classmethod est une référence vers la classe, None pour une méthode classique. Sous forme un peu plus visuelle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Fonction -- type() +-> 'function' -> Fonction ou méthode statique (@staticmethod) +-> 'instancemethod' -- im_self +-> None -> Méthode +-> Classe -> Méthode de classe (@classmethod)
Je vais être plus précis. J'ai une classe du type suivant :
Dans un autre code j 'utilise :
Code : 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 class math_id(): def __init__(self): self.alias = None self.numbVar = 0 self.listNameVar = None self.litteral = True self.domDef = None def get_nameVar(self): if self.listNameVar == None: nbVar = abs(self.numbVar) if nbVar == 1: self.listNameVar = ['x'] elif nbVar == 2: self.listNameVar = ['x', 'y'] elif nbVar == 3: self.listNameVar = ['x', 'y', 'z'] elif nbVar > 3: self.listNameVar = [] for i in range(nbVar): self.listNameVar += ['x_' + str(i+1)] return self.listNameVar
Je voudrais changer l'avant dernière ligne qui est un gros bricolage par quelque chose de plus propre qui me dise que get_nameVar n'est pas une constante présente dans __init__
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 list_var_math_id = [] for meth in dir(tool_Builder_Def.defCtFunc.math_id()): if not meth.startswith('__'): if str(getattr(tool_Builder_Def.defCtFunc.math_id(), meth))[0] <> '<' : list_var_math_id.append(meth)
Dans ce cas, tu pourrais simplement vérifier que l'objet peut être appelé ? (présence de la méthode __call__)
Dans cas cité au dessus par oiffrig, la fonction built-in callable peut t'aider.
Merci à tous les deux. Cela m'apprendra à ne même pas jeter un oeil sur le dir(...).Après cette auto-flagélation
, je n'ai qu'un mot à dire : dodo.
![]()
Partager