Bonjour,
J'essaie de créer une classe dynamiquement à l'aide de la class type
code de la class
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Test = type("Personne",(),method
Class Personne :
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 """ @author: Battant """ from Personne import * def créer_personne (personne, nom, prenom, age) : personne.nom = nom personne.prenom = prenom personne.age = age def présenter_personne (personne) : print ("prénom : {} \n prénom : {} \n âge : []" \ .format(personne.prenom,personne.nom,personne.age)) method = { "__init__" :"créer,personne", "__repr__":"présenter_personne",
Problème : malgré la surcharge de la méthode spéciale __repr__ dans la définition de la class instanciée dynamiquement, la méthode __repr__ définie n'est pas appelée a la place il y a :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: Battant """ class Personne : """ claase représentant une personne issus du cours """ def __new__ (cls, nom, prénom, age) : print ("Appel de la méthode __new__ de la classe".format(cls)) return object.__new__(cls) def __init__ (self, nom,prénom, age) : self.nom = nom self.prénom = prénom self.age = age self._lieu = "orbe" def __repr__(self): """Quand on entre notre objet dans l'interpréteur affiche les information sur l'objet sous forme de chaine de caractèree """ return "Personne : nom : nom( {} ), prénome : prénom ( {} ), age : age( {} ) lieu : lieu( {} )" \ .format (self.nom,self.prénom,self.age,self.lieu) def __str__(self): """Quand on entre notre objet dans l'interpréteur affiche les information sur l'objet sous forme de chaine de caractère """ #return "Personne: nom({}), prénom({}), âge({})".format( # self.nom, self.prenom, self.age) return ("Personne : nom : nom({}), prénome : prénom({}), age : age({}) lieu : lieu({})" \ .format ( self.nom,self.prénom,self.age,self.lieu)) def _get_lieu (self) : return self._lieu def _set_lieu (self,nouveauLieu) : print ("Il semble que : {} déménage à {}".format(self.prénom,nouveauLieu)) self._lieu = nouveauLieu lieu = property(_get_lieu,_set_lieu)
Question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 from test_personne import * >>> test = type("Personne ",(object,),method) >>> test <class '__main__.Personne '> >>>
1. Est-ce que les clas créée dynamiquement à l'aide de type ne se comporte pas la même chose que les clas normal et si oui pourqoi ?
2. Y'a-il vune façon de surcharger les méthode spécial ou nom avec des classe créée de cette manière
Merci pour votre support
Meilleures salutations
Partager