Suite à une réorganisation de classe dans mon programme je rencontre un problème d'appel à fonction
mon programme initial est composer de type de classe
cela fonctionne correctement dans ce cas de figure
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 class A ( object) def init ( self) class B def __init__ (self) . def func_1 (cls, arg ) .. _Control=cls._A__func2__(Arg1) . def func_2 (cls,_Control) _ClsListRoot=str(__class__).split('\'',2) _ClsRoot=_ClsListRoot[1].lstrip('__main__.') _ClsObj='_'+cls.__class__.__name__ _ArgCmdType=_ClsObj+_FuncCmd _ArgCmd=_ClsRoot+'.'+_ArgCmdType _KsState=getattr(cls,_ArgCmdType)(_ VarOther)
(objet cls défini dans l'appel à un wrapper associé à la fonction que je n'ai pas décris ici )
j'ai réorganisé en classe séparée
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 class A ( object) def init ( self) class B def __init__ (self) . def func_1 (cls, arg ) .. _Control=cls._A__func2__(Arg1) class C def __init__ (self) . def func_2 (cls,_Control) _ClsListRoot=str(__class__).split('\'',2) _ClsRoot=_ClsListRoot[1].lstrip('__main__.') _ClsObj='_'+cls.__class__.__name__ _ArgCmdType=_ClsObj+_FuncCmd _ArgCmd=_ClsRoot+'.'+_ArgCmdType _KsState=getattr(cls,_ArgCmdType)(_ VarOther)
L'objet cls est défini pour dans l'appel d'un décorateur de chaque fonction cependant dans la func_2 l'objet cls fait référence à la classe _main__.A.B object ce qui engendre une erreur :
comme je ne souhaite pas inscrire en dure l'appel dans le code pour de la portabilité j'ai tenté de remplacer cls par _ClsRoot ou même par _class__.__name__ mais cela me sort une erreur :_KsState=getattr(cls,_ArgCmdType)(_ClsRoot,_KsState[1])AttributeError: 'B' object has no attribute '_C__resultatdeFuncCmd'
bref y a-t-il in moyen de faire un appel indirect d'une classe en utilisant une chaîne de caractère ou d'obtenir un objet exploitable représentant le chemin de la fonction de la classe vu que l'appel interclasse n’exécute pas la fonction __ init__ de la classe C et empêche de initialiser self ?AttributeError: 'str' object has no attribute '_C__resultatdeFuncCmd'
Partager