Deskriptor in Python

| | | | | | | | | | |

Deskriptorprotokoll:
In anderen Programmiersprachen heißen Deskriptoren Setter und Getter, wobei öffentliche Funktionen verwendet werden, um eine private Variable zu erhalten und zu setzen. Python hat kein Konzept für private Variablen, und das Deskriptorprotokoll kann als Pythonic-Methode betrachtet werden, um so etwas zu erreichen. Deskriptoren — Es ist eine neue Art, Klassen in Python zu implementieren, und es muss nichts von einem bestimmten Objekt geerbt werden. Um Deskriptoren einfach in Python zu implementieren, müssen wir mindestens eine der oben definierten Methoden verwenden. Beachten Sie, dass die folgende Instanz das Objekt zurückgibt, auf das durch das Attribut zugegriffen wurde, und dass der Besitzer die Klasse ist, in der das Handle als Attribut zugewiesen wurde. Es gibt drei Protokolle im Python-Deskriptor für Setter, Getter und eine Löschmethode.

  • gfg .__ get __ (self, obj, type = None) : Dieses Attribut wird aufgerufen, wenn Sie die Informationen (value = obj.attr) erhalten möchten, und was immer es zurückgibt, ist — Dies wird an den Code übergeben, der den Attributwert angefordert hat.
  • gfg .__ set __ (self, obj, value) : Diese Methode wird aufgerufen, um die Attributwerte ‚Äã‚Äã(obj .attr = &# 39; Wert ') und es wird Ihnen nichts zurückgegeben.
  • gfg .__ delete __ (self, obj) : Diese Methode wird aufgerufen, wenn ein Attribut von einem Objekt entfernt wird (del obj.attr)

Deskriptoraufruf:
Deskriptoren werden automatisch aufgerufen, wenn ein Aufruf für die Methode set () oder den get () Methode. Zum Beispiel sucht obj.gfg nach gfg im Wörterbuch obj . Wenn gfg eine __get __ () Methode definiert, dann gfg .__ get __ (obj) . Sie kann auch direkt über den Methodennamen aufgerufen werden, also gfg .__ get __ (obj) .


# Python-Programm anzeigen
# wie man den Deskriptor aufruft

def __ getattribute __ ( self , key):

v = Objekt .__ getattribute __ ( self , key)

if hasattr ( v, `__get__` ):

return v .__ get __ ( None , self )

return v

Wichtige Hinweise:

  • Deskriptoren werden von der Methode __getattribute __ () aufgerufen.
  • Das Überschreiben von __getattribute__ () verhindert automatische Aufrufe des Deskriptors.
  • object .__ getattribute __ () und type .__ getattribute __ () verschiedene Aufrufe von __get __ ( ) .
  • Datendeskriptoren überschreiben immer Instanzwörterbücher.
  • Nicht-Datendeskriptoren können durch Instanzwörterbücher überschrieben werden.

Ein Beispiel für einen Deskriptor:
In diesem Beispiel legt ein Datendeskriptor normalerweise Werte fest und gibt sie zurück und gibt eine Nachricht aus, die ihren Zugriff protokolliert.
Code 1:


class Descriptor ( object ):

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

self . name = name


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

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

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

if isinstance (name, str ):

self . name = name

else :

raise TypeError ( " Name sollte string sein " )


class GFG ( Objekt ):

name = Descriptor ()

g = GFG ()

g.name = "Geeks"

print (g.name)

Beenden:

Python.Engineering

Code 2:


< tbody>

class Descriptor ( Objekt ):


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

self . name = name


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

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


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

if isinstance ( name, str ):

self . name = name

else :

raise TypeError ( "Name should be string" )


class GFG ( Objekt ):

name = Deskriptor ()


g = GFG ()

g.name = "Computer"

print ( g.name)

Exit:

 ComputerforComputer 

Erstelle ein Handle mit Eigenschaft ():
Eigenschaft () ist es einfach, einen verwendbaren Deskriptor für jedes Attribut zu erstellen. Syntax zum Erstellen der Eigenschaft property()

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

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

# Python-Programm zur Erklärung der Eigenschaft ( ) Funktion


# Alphabet-Klasse

class Alphabet:

def __ init __ ( self , value):

self ._ value = value


# Werte abrufen ‚Äã‚Äã

def getValue ( se lf ):

print ( `Getting value` )

return self ._ value


# installation values ‚Äã‚Äã

def setValue ( self , value):

print ( `Setting value to` + Wert)

self ._ value = value


# remo Fünf Werte ‚Äã‚Äã

def delValue ( self ):

print ( `Wert löschen` )

del self ._ value


value = Eigenschaft (getValue, setValue, delValue,)


# Wert übergeben

x = Alphabet ( `GeeksforGeeks` )

print (x.value)


x.value = `GfG`

del x.value

Exit:

 Wert abrufen Python.Engineering Wert auf GfG setzen Wert löschen 

Generieren eines Deskriptors mithilfe von Klassenmethoden:
Dabei haben wir Let`s get the class erstellt und eine der Deskriptormethoden überschreiben __set__ , __ get__ und __delete__ . Diese Methode wird verwendet, wenn derselbe Deskriptor für viele verschiedene Klassen und Attribute benötigt wird, beispielsweise zur Typprüfung.


class Deskriptor ( Objekt ):

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

self .name = name

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

return " {} für {} " . format ( self . name, self . name)


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

if isinstance (name, str ):

self . name = name

else :

raise TypeError ( "Name sollte string sein" )


class GFG ( object ):

name = Descriptor ()


g = GFG ( )

g.name = "Geeks "

print (g.name)

Ausgabe:

 Python.Engineering 

Erstellen Sie einen Deskriptor mit @property Decorator:
In this Wir nutzen die Leistungsfähigkeit von Property-Decorators, die eine Kombination aus einer Property-Type-Methode und Python-Decorators sind.


class Alphabet:

def __ init __ ( self , Wert):

self ._ value = value


# durch Abrufen von Werten ‚Äã‚Äã

@ property

def value ( self ):

print ( `Getting value` )

return self ._ value

# Einstellungswerte ‚Äã‚Äã

@ value . setter

def value ( self , value ):

print ( `Setting value to ` + value)

self ._ value = value


# Werte entfernen ‚Äã‚Äã

@ value .deleter

def value ( self ):

print ( `Wert löschen` )

del self ._ value



# Wert übergeben

x = Alphabet ( `Peter` )

print (x.value)


x.value = `Diesel`


del x.value

Exit:

 Wert Peter holen Wert auf Diesel setzen Wert löschen 

Shop

Learn programming in R: courses

$

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

$

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