Vous êtes sur la page 1sur 12

méthodes magiques:

(__and__,__dir__,__hash__,__repr__)
la méthode _and_:
définition:
En Python, la méthode magique __and__ est utilisée
pour définir le comportement de l'opérateur logique
"et" (&) pour les instances de votre classe. Cependant, il
est essentiel de comprendre que __and__ est souvent
utilisé dans le contexte des classes qui représentent des
objets avec une sémantique logique.

Voici un exemple simple pour illustrer l'utilisation de la


méthode __and__ :Voici un exemple simple pour
illustrer comment vous pourriez implémenter la
méthode __and__ dans une classe :
class NombreLogique:
def __init__(self, valeur):
self.valeur = valeur

def __and__(self, autre_objet):


# Définissez le comportement de l'opération logique
"et" pour vos objets
if isinstance(autre_objet, NombreLogique):
return NombreLogique(self.valeur and
autre_objet.valeur)
else:
raise TypeError("L'opération 'et' n'est définie que
pour les instances de NombreLogique.")

# Utilisation de la classe
nombre1 = NombreLogique(True)
nombre2 = NombreLogique(False)
resultat_et = nombre1 & nombre2 # Cela utilise la
méthode __and__
print(resultat_et.valeur) # Cela affiche False
Dans cet exemple, la classe NombreLogique
représente des nombres logiques (True/False). La
méthode __and__ est utilisée pour définir
comment effectuer l'opération logique "et" entre
deux objets de cette classe.
Lorsque vous utilisez l'opérateur & entre deux instances
de NombreLogique, Python appelle automatiquement la
méthode __and__ de la première instance et lui passe la
deuxième instance comme argument. Le résultat de
l'opération logique "et" est ensuite renvoyé dans un
nouvel objet de la même classe.

En résumé, la méthode __and__permet de personnaliser


le comportement de l'opération logique "et" pour les
objets de votre classe. Vous pouvez adapter cette
méthode en fonction de la logique spécifique de votre
application.
la méthode__dir_:
définition:
La méthode magique __dir__ en Python est utilisée pour
personnaliser le comportement de l'objet lorsqu'on
utilise la fonction intégrée dir() sur cet objet. La fonction
dir() renvoie une liste des noms d'attributs valides pour
un objet.
La méthode __dir__ doit renvoyer une liste de noms
d'attributs valides pour l'objet. Elle est souvent utilisée
pour masquer certains attributs ou pour ajouter des
attributs personnalisés lors de l'appel de dir() sur l'objet.

Voici un exemple simple illustrant l'utilisation de __dir__


:
class MaClasse:
def __init__(self):
self.attribut1 = "valeur1"
self.attribut2 = "valeur2"

def __dir__(self):
# Personnaliser la liste des attributs visibles
return ["attribut1", "attribut2", "attribut3"]

# Utilisation de la classe
objet = MaClasse()

# Appel de la fonction dir() sur l'objet


print(dir(objet))
Dans cet exemple, la méthode __dir__ est définie pour
renvoyer une liste personnalisée des attributs valides.
Lorsque la fonction dir() est appelée sur l'objet, la liste
des attributs sera celle renvoyée par la méthode
__dir__.
Il est important de noter que la personnalisation de
__dir__ doit être faite avec précaution, car elle peut
influencer les outils qui dépendent de la précision de la
sortie de dir(). Dans la plupart des cas, la méthode
__dir__ n'est pas nécessaire à moins que vous ayez une
raison spécifique de personnaliser la liste des attributs
exposés.
la méthode __hash __:
définition:
La méthode magique __hash__ en Python est utilisée
pour définir le comportement de l'objet lorsqu'il est
utilisé comme une clé dans un dictionnaire ou inséré
dans un ensemble (set). Elle doit renvoyer un entier (le
code de hachage) qui identifie l'objet.
La méthode __hash__ est utilisée par Python pour
optimiser la recherche dans des structures de données
telles que les dictionnaires et les ensembles.
class MaClasse:
def __init__(self, valeur):
self.valeur = valeur
def __hash__(self):
return hash(self.valeur)

# Utilisation de la classe
objet1 = MaClasse(42)
objet2 = MaClasse(42)

# Les objets équivalents ont le même code de hachage


print(objet1 == objet2) # True
print(hash(objet1) == hash(objet2)) # True

# Utilisation dans un ensemble


ensemble = {objet1, objet2}
print(ensemble) # Un seul objet sera ajouté, car ils ont
le même code de hachage
la méthode __repr__:
définition:
a méthode magique __repr__ en Python est utilisée
pour définir une représentation sous forme de chaîne de
l'objet. C'est une méthode spéciale qui est appelée par
la fonction intégrée repr() et par l'instruction print
lorsqu'elle est utilisée pour afficher l'objet.
L'objectif de __repr__ est de fournir une représentation
"formelle" de l'objet, qui doit être une chaîne de
caractères valide en Python telle que si elle est passée à
l'instruction eval(), elle recréera un objet équivalent.
Voici un exemple d'utilisation de __repr__ dans une
class:
class MaClasse:
def __init__(self, valeur):
self.valeur = valeur

def __repr__(self):
return f"MaClasse({self.valeur})"

# Utilisation de la classe
objet = MaClasse(42)

# Appel de repr() directement


representation_formelle = repr(objet)
print(representation_formelle) # Affiche
"MaClasse(42)"

# Appel implicite lors de l'utilisation de l'instruction print


print(objet) # Affiche "MaClasse(42)"
La méthode __repr__ est souvent utilisée pour fournir
une représentation détaillée et explicite de l'objet, ce
qui est utile pour le débogage et la compréhension du
contenu de l'objet. Lorsque __repr__ n'est pas définie,
c'est souvent la méthode __str__ qui est utilisée par
défaut dans les contextes où __repr__ est attendue.
__dir__,__hash__,__repr__)
la méthode _and_:
définition:
En Python, la méthode magique __and__ est utilisée
pour définir le comportement de l'opérateur logique
"et" (&) pour les instances de votre classe. Cependant, il
est essentiel de comprendre que __and__ est souvent
utilisé dans le contexte des classes qui représentent des
objets avec une sémantique logique.

Voici un exemple simple pour illustrer l'utilisation de la


méthode __and__ :Voici un exemple simple pour
illustrer comment vous pourriez implémenter la
méthode __and__ dans une classe :
class NombreLogique:
def __init__(self, valeur):
self.valeur = valeur

def __and__(self, autre_objet):


# Définissez le comportement de l'opération logique
"et" pour vos objets
if isinstance(autre_objet, NombreLogique):
return NombreLogique(self.valeur and
autre_objet.valeur)
else:
raise TypeError("L'opération 'et' n'est définie que
pour les instances de NombreLogique.")

# Utilisation de la classe
nombre1 = NombreLogique(True)
nombre2 = NombreLogique(False)

resultat_et = nombre1 & nombre2 # Cela utilise la


méthode __and__
print(resultat_et.valeur) # Cela affiche False
Dans cet exemple, la classe NombreLogique
représente des nombres logiques (True/False). La
méthode __and__ est utilisée pour définir
comment effectuer l'opération logique "et" entre
deux objets de cette classe.
Lorsque vous utilisez l'opérateur & entre deux instances
de NombreLogique, Python appelle automatiquement la
méthode __and__ de la première instance et lui passe la
deuxième instance comme argument. Le résultat de
l'opération logique "et" est ensuite renvoyé dans un
nouvel objet de la même classe.

En résumé, la méthode __and__permet de personnaliser


le comportement de l'opération logique "et" pour les
objets de votre classe. Vous pouvez adapter cette
méthode en fonction de la logique spécifique de votre
application.
la méthode__dir_:
définition:
La méthode magique __dir__ en Python est utilisée pour
personnaliser le comportement de l'objet lorsqu'on
utilise la fonction intégrée dir() sur cet objet. La fonction
dir() renvoie une liste des noms d'attributs valides pour
un objet.
La méthode __dir__ doit renvoyer une liste de noms
d'attributs valides pour l'objet. Elle est souvent utilisée
pour masquer certains attributs ou pour ajouter des
attributs personnalisés lors de l'appel de dir() sur l'objet.

Voici un exemple simple illustrant l'utilisation de __dir__


:
class MaClasse:
def __init__(self):
self.attribut1 = "valeur1"
self.attribut2 = "valeur2"

def __dir__(self):
# Personnaliser la liste des attributs visibles
return ["attribut1", "attribut2", "attribut3"]

# Utilisation de la classe
objet = MaClasse()
# Appel de la fonction dir() sur l'objet
print(dir(objet))
Dans cet exemple, la méthode __dir__ est définie pour
renvoyer une liste personnalisée des attributs valides.
Lorsque la fonction dir() est appelée sur l'objet, la liste
des attributs sera celle renvoyée par la méthode
__dir__.
Il est important de noter que la personnalisation de
__dir__ doit être faite avec précaution, car elle peut
influencer les outils qui dépendent de la précision de la
sortie de dir(). Dans la plupart des cas, la méthode
__dir__ n'est pas nécessaire à moins que vous ayez une
raison spécifique de personnaliser la liste des attributs
exposés.
la méthode __hash __:
définition:
La méthode magique __hash__ en Python est utilisée
pour définir le comportement de l'objet lorsqu'il est
utilisé comme une clé dans un dictionnaire ou inséré
dans un ensemble (set). Elle doit renvoyer un entier (le
code de hachage) qui identifie l'objet.
La méthode __hash__ est utilisée par Python pour
optimiser la recherche dans des structures de données
telles que les dictionnaires et les ensembles.
class MaClasse:
def __init__(self, valeur):
self.valeur = valeur
def __hash__(self):
return hash(self.valeur)

# Utilisation de la classe
objet1 = MaClasse(42)
objet2 = MaClasse(42)
# Les objets équivalents ont le même code de hachage
print(objet1 == objet2) # True
print(hash(objet1) == hash(objet2)) # True

# Utilisation dans un ensemble


ensemble = {objet1, objet2}
print(ensemble) # Un seul objet sera ajouté, car ils ont
le même code de hachage
la méthode __repr__:
définition:
a méthode magique __repr__ en Python est utilisée
pour définir une représentation sous forme de chaîne de
l'objet. C'est une méthode spéciale qui est appelée par
la fonction intégrée repr() et par l'instruction print
lorsqu'elle est utilisée pour afficher l'objet.
L'objectif de __repr__ est de fournir une représentation
"formelle" de l'objet, qui doit être une chaîne de
caractères valide en Python telle que si elle est passée à
l'instruction eval(), elle recréera un objet équivalent.

Voici un exemple d'utilisation de __repr__ dans une


class:
class MaClasse:
def __init__(self, valeur):
self.valeur = valeur

def __repr__(self):
return f"MaClasse({self.valeur})"

# Utilisation de la classe
objet = MaClasse(42)

# Appel de repr() directement


representation_formelle = repr(objet)
print(representation_formelle) # Affiche
"MaClasse(42)"

# Appel implicite lors de l'utilisation de l'instruction print


print(objet) # Affiche "MaClasse(42)"
La méthode __repr__ est souvent utilisée pour fournir
une représentation détaillée et explicite de l'objet, ce
qui est utile pour le débogage et la compréhension du
contenu de l'objet. Lorsque __repr__ n'est pas définie,
c'est souvent la méthode __str__ qui est utilisée par
défaut dans les contextes où __repr__ est attendue.

Vous aimerez peut-être aussi