Descripteur en Python

| | | | | | | | | | |

Protocole de descripteur :
Dans d`autres langages de programmation, les descripteurs sont appelés setter et getter, où les fonctions publiques sont utilisées pour obtenir et définir une variable privée. Python n`a pas de concept de variables privées, et le protocole de descripteur peut être considéré comme un moyen Pythonique d`obtenir quelque chose comme ça. Descripteurs — c`est une nouvelle façon d`implémenter des classes en Python, et il n`a pas besoin d`hériter de quoi que ce soit d`un objet particulier. Pour implémenter facilement des descripteurs en python, nous devons utiliser au moins une des méthodes définies ci-dessus. Notez que l`instance ci-dessous renvoie l`objet auquel l`attribut a accédé et que le propriétaire est la classe dans laquelle le handle a été affecté en tant qu`attribut. Il existe trois protocoles dans le descripteur Python pour les setters, les getters et une méthode de suppression.

  • gfg .__ get __ (self, obj, type = None)  : Cet attribut est appelé lorsque vous souhaitez obtenir les informations (value = obj.attr) et tout ce qu`il renvoie est — c`est ce qui sera transmis au code qui a demandé la valeur de l`attribut.
  • gfg .__ set __ (self, obj, value)  : cette méthode est appelée pour définir les valeurs d`attribut ‚Äã‚Äã(obj .attr = &# 39; valeur ') et il ne vous renverra rien.
  • gfg .__ delete __ (self, obj) : Cette méthode est appelée lorsqu`un attribut est supprimé d`un objet (del obj.attr)

Invocation de descripteur :
Les descripteurs sont appelés automatiquement lorsqu`une invocation est reçue pour la méthode set () ou la méthode obtenir () méthode. Par exemple, obj.gfg recherche gfg dans le dictionnaire obj . Si gfg définit une méthode __get __ () , alors gfg .__ get __ (obj) . Il peut également être appelé directement par le nom de la méthode, c`est-à-dire gfg .__ get __ (obj) .


# Afficher le programme Python
# comment appeler le descripteur

def __ getattribute __ ( soi , clé) :

v = objet .__ getattribute __ ( soi , clé)

si hasattr ( v, `__get__` ) :

return v .__ get __ ( Aucun , self )

return v

Points importants à retenir :

  • Les descripteurs sont appelés par la méthode __getattribute __ () .
  • Remplacer __getattribute__ () empêche les appels automatiques au descripteur.
  • object .__ getattribute __ () et type .__ getattribute __ () divers appels à __get __ ( ) .
  • Les descripteurs de données remplacent toujours les dictionnaires d`instance.
  • Les descripteurs non-données peuvent être remplacés par des dictionnaires d`instance.

Un exemple de descripteur :
Dans cet exemple, un descripteur de données définit et renvoie généralement des valeurs ‚Äã‚Äãet imprime un message enregistrant leur accès.
Code 1 :


classe Descripteur ( objet ) :

def __ init __ ( soi , nom = ` `) :

soi . nom = nom


def __ obtenir __ ( soi , obj, objtype) :

return " {} for {} " . format ( self .name, soi . name)

def __ set __ ( self , obj, name) :

si isinstance (nom, str ) :

soi . nom = nom

autre  :

raise TypeError ( " Le nom doit être une chaîne " )


class GFG ( objet ) :

nom = Descripteur ()

g = GFG ()

g.name = "Geeks"

print (g.name)

Quitter :

Python.Engineering

Code 2 :


< tbody>

class Descriptor ( objet ) :


def __ init __ ( self , name = ` `):

self . nom = nom


def __ obtenir __ ( soi , obj, objtype) :

return "{} for {}" . format ( self . nom, soi . nom)


def __ set __ ( self , obj, nom ) :

si estinstance ( nom, str ) :

soi . name = name

else  :

raise TypeError ( "Le nom doit être une chaîne" )


classe GFG ( objet ) :

nom = Descripteur ()


g = GFG ()

g.name = "Ordinateur"

print ( g.name)

Quitter :

 OrdinateurpourOrdinateur 

Créer un handle en utilisant la propriété () :
propriété () , il est facile de créer un descripteur utilisable pour n`importe quel attribut. Syntaxe de création de la propriété property()

 (fget = None, fset = None, fdel = None, doc = None) 

< table border = "0" cellpadding = "0" cellspacing = "0">

# Programme Python pour expliquer la propriété ( ) fonction


# Classe alphabétique

classe Alphabet :

def __ init __ ( soi , valeur) :

soi ._ valeur = valeur


# obtenir des valeurs ‚Äã‚Äã

def getValue ( se lf ) :

imprimer ( `Obtenir la valeur` )

return self ._ value


# valeurs d`installation ‚Äã‚Äã

def setValue ( self , value):

print ( `Définir la valeur sur` + valeur)

soi ._ valeur = valeur


# remo cinq valeurs ‚Äã‚Äã

def delValue ( soi ) :

imprimer ( `Suppression de la valeur` )

del soi ._ valeur


valeur = propriété (getValue, setValue, delValue,)


# transmettez la valeur

x = Alphabet ( `GeeksforGeeks` )

print (x.value)


x.value = `GfG`

del x.value

Quitter :

 Obtenir la valeur Python.Engineering Définir la valeur sur GfG Supprimer la valeur 

Génération d`un descripteur à l`aide de méthodes de classe :
Dans ce cas, nous avons créé Obtenons la classe et remplaçons l`une des méthodes de descripteur __set__ , __ get__ et __delete__ . Cette méthode est utilisée lorsque le même descripteur est requis pour plusieurs classes et attributs différents, par exemple, pour la vérification de type.


classe Descripteur ( objet ) :

def __ init__ ( soi , nom = ` `) :

self .name = nom

def __ get __ ( self , obj, objtype) :

return " {} pour {} " . format ( self . nom, soi . nom)


def __ set __ ( self , obj, nom ) :

si estinstance (nom, str ) :

soi . nom = nom

autre  :

augmenter TypeError ( "Le nom doit être une chaîne" )


classe GFG ( objet ):

nom = Descripteur ()


g = GFG ( )

g.name = "Geeks "

imprimer (g.name)

Sortie :

 Python.Engineering 

Créez un descripteur à l`aide de @property Decorator :
Dans ce nous utilisons la puissance des décorateurs de propriété, qui sont une combinaison d`une méthode de type de propriété et de décorateurs Python.


classe Alphabet :

def __ init __ ( self , valeur) :

self ._ valeur = valeur


# en récupérant les valeurs ‚Äã‚Äã

@ property

def value ( self ):

print ( `Obtenir la valeur` )

return self ._ valeur

# valeurs de réglage ‚Äã‚Äã

@ value . setter

def value ( self , value ):

print ( `Définir la valeur sur ` + valeur)

self ._ value = value


# supprimer les valeurs ‚Äã‚Äã

@ value .deleter

def value ( soi ) :

imprimer ( `Suppression de la valeur` )

del soi ._ valeur



# passer la valeur

x = Alphabet ( `Pierre` )

imprimer (x.value)


x.value = `Diesel`


del x.value

Quitter :

 Obtention de la valeur Peter Réglage de la valeur sur Diesel Suppression de la valeur 

Descripteur en Python __del__: Questions

Descripteur en Python __delete__: Questions

Shop

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method