Bonjour,


J'essaie de créer une classe dynamiquement à l'aide de la class type

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Test = type("Personne",(),method
code de la class

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",
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
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)
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
 
from test_personne import *
>>> test = type("Personne ",(object,),method)
>>> test
<class '__main__.Personne '>
>>>
Question :

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