# Pokaż program w Pythonie
# jak wywołać deskryptor
def __ getattribute __ ( self , klucz): v = object .__ getattribute __ ( self , klucz)
if hasattr ( v, `__get__` ):
return cod e> v .__ get __ ( Brak , self )
return v
Ważne punkty do zapamiętania: - Deskryptory są wywoływane przez metodę
__getattribute __ () . - Zastąpienie
__getattribute__ () zapobiega automatycznym wywołaniom deskryptora. object .__ getattribute __ () i type .__ getattribute __ () różne wywołania __get __ ( ) . - Deskryptory danych zawsze zastępują słowniki instancji.
- Deskryptory niebędące danymi mogą być nadpisane przez słowniki instancji.
Przykład deskryptora: W tym przykładzie deskryptor danych zwykle ustawia i zwraca wartości „Ęã”ãi wypisuje komunikat logujący ich dostęp. Kod 1:
class Deskryptor ( obiekt ): def __ init __ ( self , nazwa = ` `):
self . name = name
def __ get __ ( self , obj, objtype): return " {} for {} "< /kod> . format ( self .name, self . name)
def __ set __ ( self , obj, name):
if isinstance (nazwa, str ):
self . name = name
else : raise TypeError ( " Nazwa powinna być ciągiem " )
class GFG ( object ):
nazwa = Deskryptor () g = GFG () g.name = "Geeks" print (g.name) Wyjście: Python.Engineering Kod 2:
< tbody> class Deskryptor ( obiekt ):
def __ init __ ( self , nazwa = ` `):
self . name = name
def __ get __ ( self , obj, objtype):
return "{} for {}" . format ( self . name, self . name)
def __ set __ ( self , obj, nazwa ):
if isinstance ( nazwa, str ):
self . name = name
else :
raise TypeError ( "Nazwa powinna być ciągiem" )
class GFG ( obiekt ):
nazwa = Deskryptor ()
g = GFG ()
g.name = "Komputer"
drukuj ( g.name)
Wyjście: ComputerforComputer Utwórz uchwyt za pomocą właściwości ():
właściwość () , łatwo jest utworzyć użyteczny deskryptor dla dowolnego atrybutu. Składnia tworzenia właściwości property() (fget = None, fset = None, fdel = None, doc = None) < table border = "0" cellpadding = "0" cellpacing = "0"> | # Program w Pythonie wyjaśniający właściwość ( ) funkcja
# Klasa alfabetu
klasa Alfabet:
def __ init __ ( self , wartość):
self ._ wartość = wartość
# pobieranie wartości ‚Ęã‚Ęã def getValue ( se lf ):
print ( `Pobieranie wartości` )
return self wartość ._
# wartości instalacji ‚Ęã‚Ęã
def setValue ( self , wartość):
print ( `Ustawianie wartości na` + wartość)
self ._ wartość = wartość
# remo ve wartości ‚Ęã‚Ęã
def delValue ( self ):
print ( `Usuwanie wartości` )
del self wartość ._
wartość = właściwość (getValue, setValue, delValue,)
# przekaż wartość
x = Alfabet ( `GeeksforGeeks` )
print (x.value)
x.value = `GfG`
del x.value
Wyjście: Pobieranie wartości Python.Engineering Ustawianie wartości na GfG Usuwanie wartości Generowanie deskryptora przy użyciu metod klas: W tym celu utworzyliśmy Pobierz klasę i zastąpmy dowolne metody deskryptora __set__ , __ get__ i __delete__ . Ta metoda jest używana, gdy ten sam deskryptor jest wymagany dla wielu różnych klas i atrybutów, na przykład do sprawdzania typu.
class Deskryptor ( obiekt ):
def __ init__ ( self , nazwa = ` `):
self .name = nazwa
def __ get __ ( self , obj, objtype):
return " {} for {} " . format ( self . name, self . name)
def __ set __ ( self , obj, nazwa ):
if isinstance (nazwa, str ):
self . name = name
else :
podniesienie TypeError ( "Nazwa powinna być ciągiem" )
class GFG ( object ):
nazwa = Deskryptor ()
g = GFG ( )
g.name = "Geeks "
print (g.name)
< /kod> Wynik: Python.Engineering Utwórz deskryptor za pomocą @property Decorator: W tym używamy mocy dekoratorów właściwości, które są kombinacją metody typu właściwości i dekoratorów Pythona.
class Alfabet: def __ init __ ( self , wartość):
self ._ wartość = wartość
# przez pobranie wartości ‚Ęã‚Ęã
@ property
def wartość ( self ): print ( `Pobieranie wartości` )
return self wartość ._ # wartości ustawień ‚Ęã‚Ęã
@ wartość . setter
def wartość ( self , value ):
print ( `Ustawianie wartości na ` + value)
self ._ wartość = wartość
# usuń wartości ‚Ęã‚Ęã
@ value .deleter def wartość ( self ):
drukuj ( `Usuwanie wartości` ) del self wartość ._
# przekaż wartość
x = Alfabet ( `Piotr` ) print (x.value)
x.value = `Diesel`
del x.value
Wyjście: Pobieranie wartości Peter Ustawienie wartości na Diesel Usuwanie wartości
Deskryptor w Pythonie __del__: Questions
Deskryptor w Pythonie __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
| | | | |