डिस्क्रिप्टर प्रोटोकॉल:
अन्य प्रोग्रामिंग भाषाओं में, डिस्क्रिप्टर को सेटर और गेट्टर कहा जाता है, जहां एक निजी चर प्राप्त करने और सेट करने के लिए सार्वजनिक कार्यों का उपयोग किया जाता है। पायथन में निजी चर की कोई अवधारणा नहीं है, और डिस्क्रिप्टर प्रोटोकॉल को इस तरह कुछ हासिल करने के लिए पाइथोनिक तरीके के रूप में सोचा जा सकता है। वर्णनकर्ता — यह पायथन में कक्षाओं को लागू करने का एक नया तरीका है, और इसे किसी विशेष वस्तु से कुछ भी प्राप्त करने की आवश्यकता नहीं है। पायथन में डिस्क्रिप्टर को आसानी से लागू करने के लिए, हमें ऊपर परिभाषित विधियों में से कम से कम एक का उपयोग करना चाहिए। ध्यान दें कि नीचे दिया गया उदाहरण उस ऑब्जेक्ट को लौटाता है जिसे विशेषता द्वारा एक्सेस किया गया था और स्वामी वह वर्ग है जिसमें हैंडल को एक विशेषता के रूप में असाइन किया गया था। सेटर्स, गेटर्स और डिलीट मेथड के लिए पायथन डिस्क्रिप्टर में तीन प्रोटोकॉल हैं।
gfg .__ get __ (self, obj, type = none)
: इस विशेषता को तब कहा जाता है जब आप जानकारी प्राप्त करना चाहते हैं(value = obj.attr)
और यह जो कुछ भी देता है वह है — यह वह है जो उस कोड को दिया जाएगा जिसने विशेषता मान का अनुरोध किया था।gfg .__ set __ (self, obj, value)
: इस विधि को विशेषता मान सेट करने के लिए कहा जाता है ‚Äã‚Äã(obj .attr = 39; मान ')
और यह आपको कुछ भी वापस नहीं करेगा।gfg .__ delete __ (self, obj)
: इस विधि को तब कहा जाता है जब किसी वस्तु से कोई विशेषता हटा दी जाती है(del obj.attr)
विवरणकर्ता आह्वान:
वर्णनकर्ता स्वचालित रूप से तब बुलाए जाते हैं जब set ()
विधि या प्राप्त () कोड> विधि। उदाहरण के लिए,
obj.gfg
, gfg को obj
डिक्शनरी में ढूंढता है। अगर gfg एक __get __ ()
विधि को परिभाषित करता है, तो gfg .__ get __ (obj)
होता है। इसे सीधे विधि के नाम से भी बुलाया जा सकता है, यानी gfg .__ get __ (obj)
।
<टेबल बॉर्डर = "0" सेलपैडिंग = "0 "सेलस्पेसिंग =" 0 ">
<कोड क्लास =" टिप्पणियाँ "> # पायथन प्रोग्राम दिखाएं # डिस्क्रिप्टर को कैसे कॉल करें
def
<कोड वर्ग = "सादा"> __ getattribute __ ( <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, कुंजी): कोड>
<कोड वर्ग = "सादा"> v कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "कार्य"> वस्तु कोड> <कोड वर्ग = "सादा"> .__ getattribute __ ( self
, key)
अगर
hasattr
(वी, कोड> <कोड क्लास = "स्ट्रिंग"> `__get__`
):
return cod e>
v .__ __ प्राप्त करें (
<कोड वर्ग = "रंग 1"> कोई नहीं कोड> <कोड वर्ग = "सादा">, कोड> <कोड वर्ग = "रंग 1 "> स्वयं कोड> <कोड वर्ग = "सादा">) कोड>
कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "कीवर्ड"> वापसी कोड > <कोड वर्ग = "सादा"> वी कोड>
ध्यान रखने योग्य महत्वपूर्ण बिंदु:
- डिस्क्रिप्टर को
__getattribute __()
विधि द्वारा बुलाया जाता है। - ओवरराइडिंग
__getattribute__ ()
डिस्क्रिप्टर को स्वचालित कॉल को रोकता है। ऑब्जेक्ट .__ getattribute __ ()
औरटाइप .__ getattribute __ ()
विभिन्न कॉल__get __ ( )
.- डेटा डिस्क्रिप्टर हमेशा इंस्टेंस डिक्शनरी को ओवरराइड करते हैं।
- गैर-डेटा डिस्क्रिप्टर को इंस्टेंस डिक्शनरी द्वारा ओवरराइड किया जा सकता है।
डिस्क्रिप्टर का एक उदाहरण:
इस उदाहरण में, एक डेटा डिस्क्रिप्टर आमतौर पर मान सेट करता है और लौटाता है और उनकी पहुंच लॉग करने वाले संदेश को प्रिंट करता है।
कोड 1:
<टेबल बॉर्डर = "0" सेलपैडिंग = "0" सेलस्पेसिंग =" 0 ">
<कोड वर्ग ="कीवर्ड"> वर्ग कोड> <कोड वर्ग ="सादा "> वर्णनकर्ता ( <कोड वर्ग = "कार्य"> वस्तु कोड> < कोड वर्ग = "सादा">):
<कोड वर्ग = "कीवर्ड"> def कोड> <कोड वर्ग = "सादा"> __ init __ ( self
, name
=
` `):
self
। नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> नाम कोड>
<कोड वर्ग = "कीवर्ड"> def __ get __ (
self
, obj, objtype):
<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग ="कीवर्ड "> वापसी कोड> <कोड वर्ग ="स्ट्रिंग ">" {} के लिए {} "< / कोड> <कोड वर्ग = "सादा">। कोड> <कोड वर्ग = "कार्य"> प्रारूप कोड> <कोड वर्ग = "सादा"> ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा" > .name, self
. name)
कोड>
कोड वर्ग = "कीवर्ड"> def कोड> <कोड वर्ग = "सादा"> __ सेट __ ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, obj, नाम): कोड>
कोड वर्ग = "कीवर्ड"> अगर कोड> <कोड वर्ग = "कार्य" > isinstance (नाम,
str
):
self
. नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> नाम कोड>
<कोड वर्ग = "कीवर्ड"> अन्य कोड > <कोड वर्ग = "सादा">: कोड>
कोड वर्ग = "कीवर्ड"> बढ़ाएँ कोड> <कोड वर्ग = "सादा"> लेखन त्रुटि ( कोड> <कोड class ="string ">" नाम स्ट्रिंग होना चाहिए " )
class कोड> कोड> <कोड वर्ग = "सादा"> जीएफजी ( कोड> <कोड वर्ग = "कार्य"> वस्तु कोड> <कोड वर्ग = "सादा">): कोड>
<कोड वर्ग = "सादा"> नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> वर्णनकर्ता () कोड>
<कोड वर्ग = "सादा"> g कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> GFG () कोड>
<कोड वर्ग = "सादा"> g. नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "स्ट्रिंग"> "गीक्स" कोड>
<कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> (g.नाम) कोड>
बाहर निकलें:
कोड 2:
<टेबल बॉर्डर = " 0 "सेलपैडिंग =" 0 "सेलस्पेसिंग =" 0 "> < tbody>
class
Descriptor (
वस्तु कोड> <कोड वर्ग = "सादा">): कोड>
<कोड वर्ग = "कीवर्ड"> def कोड> <कोड वर्ग = "सादा" > __ init __ ( self
, name
=
< कोड वर्ग = "सादा"> ` `):
<कोड वर्ग =" अपरिभाषित रिक्त स्थान "> कोड> <कोड वर्ग ="color1 "> स्वयं कोड> <कोड वर्ग = "सादा">। नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> नाम कोड>
कोड वर्ग = "कीवर्ड"> def __ get __ (
self
, obj, objtype):
<कोड वर्ग = "कीवर्ड"> वापसी कोड> <कोड वर्ग = "स्ट्रिंग"> "{} के लिए {}" कोड> <कोड वर्ग = "सादा">। कोड> <कोड वर्ग = "कार्य"> प्रारूप कोड> <कोड वर्ग = "सादा"> ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा" >. नाम, self
. name)
डीईएफ़ कोड> <कोड वर्ग = "सादा"> __ सेट __ ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, obj, नाम ):
अगर
isinstance
(नाम,
str
):
self
<कोड वर्ग = "सादा">। नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> नाम कोड>
<कोड वर्ग = "अपरिभाषित रों गति"> कोड> <कोड वर्ग = "कीवर्ड"> अन्य कोड> <कोड वर्ग = "सादा">: कोड>
<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "कीवर्ड"> बढ़ाएँ कोड> <कोड वर्ग = "सादा"> लेखन त्रुटि ( कोड> <कोड वर्ग = "स्ट्रिंग"> "नाम स्ट्रिंग होना चाहिए" कोड> <कोड वर्ग = "सादा" >)
class
GFG (
वस्तु कोड> <कोड वर्ग = "सादा">): कोड>
<कोड वर्ग = "सादा"> नाम कोड> <कोड वर्ग = "कीवर्ड"> = < /कोड> <कोड वर्ग = "सादा"> वर्णनकर्ता () कोड>
कोड वर्ग = "सादा"> जी कोड> <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> GFG ()
<कोड वर्ग = "सादा"> g.नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "स्ट्रिंग"> "कंप्यूटर" कोड>
<कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> ( g.name)
बाहर निकलें:
ComputerforComputer
प्रॉपर्टी का उपयोग करके एक हैंडल बनाएं (): संपत्ति ()
, किसी भी विशेषता के लिए प्रयोग करने योग्य विवरणक बनाना आसान है। property()
प्रॉपर्टी बनाने के लिए सिंटैक्स (fget = कोई नहीं, fset = कोई नहीं, fdel = कोई नहीं, doc = कोई नहीं)
< टेबल बॉर्डर = "0" सेलपैडिंग = "0" सेलस्पेसिंग = "0">
<कोड क्लास = "टिप्पणियां"> # संपत्ति की व्याख्या करने के लिए पायथन प्रोग्राम ( ) फ़ंक्शन
# Alphabet class
class
<कोड वर्ग = "सादा"> वर्णमाला: कोड>
<कोड वर्ग = "कीवर्ड"> def कोड> <कोड वर्ग = "सादा"> __ init __ ( कोड > <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, मूल्य): कोड>
<कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा"> ._ मान कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> मान कोड>
<कोड वर्ग = "टिप्पणियां"> # मान प्राप्त करना ‚Äã‚Äã कोड>
<कोड सीएल गधा = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "कीवर्ड"> डीईएफ़ getValue (
se वामो कोड> <कोड वर्ग = "सादा">):
<कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> (कोड> कोड> <कोड वर्ग = "स्ट्रिंग"> `मूल्य प्राप्त करना` कोड> <कोड वर्ग = "सादा">) कोड>
<कोड वर्ग = "कीवर्ड"> वापसी कोड > self
._ value
# इंस्टालेशन वैल्यू ‚Äã‚Äã
def
setValue (
स्वयं कोड> <कोड वर्ग = "सादा">, मान): कोड>
कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "कार्य"> प्रिंट कोड> <कोड वर्ग = "सादा"> ( कोड> <कोड वर्ग = "स्ट्रिंग"> `मान सेट करने के लिए` <कोड वर्ग = "कीवर्ड"> + कोड> <कोड वर्ग = "सादा"> मान) कोड>
कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा"> ._ मान कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> मूल्य कोड>
<कोड वर्ग = "टिप्पणियां"> # रेमो ve मान
def
delValue (
स्वयं कोड> <कोड वर्ग = "सादा">): कोड>
कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> ( कोड> <कोड वर्ग = "स्ट्रिंग"> `मान हटाना` कोड> <कोड वर्ग = "सादा">) कोड>
<कोड वर्ग = "कीवर्ड"> डेल < /कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा"> ._ मान कोड>
कोड वर्ग = "सादा"> मूल्य कोड> <कोड क्लास एस = "कीवर्ड"> = कोड> <कोड क्लास = "फ़ंक्शंस"> प्रॉपर्टी कोड> <कोड क्लास = "सादा"> (getValue, setValue, delValue,) कोड >> = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> वर्णमाला ( कोड> <कोड वर्ग = "स्ट्रिंग"> `गीक्सफॉरजीक्स` कोड> <कोड वर्ग = "सादा">) कोड> code>
Print
(x.value)
x.value
=
`GfG`
बाहर निकलें:
मान प्राप्त करना p>क्लास मेथड्स का उपयोग करके डिस्क्रिप्टर बनाना:
इसमें हमने बनाया है आइए क्लास प्राप्त करें और किसी भी डिस्क्रिप्टर मेथड को ओवरराइड करें__set__
,__ get__ कोड> code>, और
__delete__
। इस पद्धति का उपयोग तब किया जाता है जब कई अलग-अलग वर्गों और विशेषताओं के लिए एक ही डिस्क्रिप्टर की आवश्यकता होती है, उदाहरण के लिए, टाइप चेकिंग के लिए।
<कोड क्लास = "कीवर्ड"> क्लास कोड> <कोड क्लास = "सादा"> डिस्क्रिप्टर (
object
):
<कोड वर्ग = "अपरिभाषित रिक्त स्थान">
<कोड वर्ग =" अपरिभाषित रिक्त स्थान "> कोड> <कोड वर्ग ="कीवर्ड"> def कोड> < कोड वर्ग = "सादा"> __ init__ ( <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, नाम कोड> <कोड वर्ग = "कीवर्ड"> =` `):
self
.name
=
name
<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड>
कोड वर्ग = "कीवर्ड"> डीईएफ़ कोड> <कोड वर्ग = "सादा"> __ प्राप्त करें __ ( कोड> < कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, obj, objtype): कोड>
<कोड वर्ग = "कीवर्ड"> वापसी कोड>
" {} for {} "
. कोड> <कोड वर्ग = "कार्य"> प्रारूप कोड> <कोड वर्ग = "सादा"> ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा" >. नाम, कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">। नाम) कोड>
कोड वर्ग = "कीवर्ड"> डीईएफ़ कोड> <कोड वर्ग = "सादा"> __ सेट __ ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">, obj, नाम ):
अगर
isinstance
(नाम,
str
):
self
<कोड वर्ग = "सादा">। नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> नाम कोड><कोड वर्ग = "कीवर्ड"> अन्य कोड > <कोड वर्ग ="सादा ">:
<कोड वर्ग =" अपरिभाषित रिक्त स्थान "> कोड> <कोड वर्ग ="कीवर्ड "> बढ़ाएँ कोड> <कोड वर्ग = "सादा"> लेखन त्रुटि (
"नाम स्ट्रिंग होना चाहिए"
<कोड वर्ग = "सादा">) कोड>
class
GFG (
object
):
<कोड वर्ग = "सादा"> नाम कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> वर्णनकर्ता ()
g
=
GFG ( )
g.name
=
"Geeks "
(g.name)
< /कोड>पी >
आउटपुट:
Python.Engineering@property डेकोरेटर का उपयोग करके एक डिस्क्रिप्टर बनाएं:
इसमें हम प्रॉपर्टी डेकोरेटर्स की शक्ति का उपयोग करते हैं, जो एक प्रॉपर्टी टाइप मेथड और पायथन डेकोरेटर्स का एक संयोजन है।
<टेबल बॉर्डर = "0" सेलपैडिंग = "0" सेलस्पेसिंग = " 0 ">
class
Alphabet:
def कोड> <कोड वर्ग = "सादा"> __ init __ ( <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा" >, मान):
< कोड वर्ग =" अपरिभाषित रिक्त स्थान "> कोड> <कोड वर्ग ="color1 " > स्वयं कोड> <कोड वर्ग = "सादा"> ._ मान कोड> <कोड वर्ग = "कीवर्ड"> = कोड> <कोड वर्ग = "सादा"> मान कोड>
कोड वर्ग = "टिप्पणियां" > # मान प्राप्त करके ‚Äã‚Äã
<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "सज्जाकार"> @ संपत्ति कोड>
<कोड वर्ग = "कुंजी" शब्द"> डीईएफ़ कोड> <कोड वर्ग = "सादा"> मूल्य ( कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा">): कोड> /p>
<कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> (कोड> <कोड वर्ग = "स्ट्रिंग"> `मूल्य प्राप्त करना` कोड> <कोड वर्ग = "सादा">) कोड>
कोड वर्ग = "कीवर्ड"> वापसी कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा" "> ._ मान
# मान सेट करना
< कोड वर्ग = "सज्जाकार"> @ मान कोड> <कोड वर्ग = "सादा">। सेटर
def
value (
self कोड> कोड> <कोड वर्ग = "सादा">, मूल्य): कोड>
कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> ( कोड > <कोड वर्ग = "स्ट्रिंग"> `मान सेट करना` कोड> <कोड वर्ग = "कीवर्ड"> + कोड> <कोड वर्ग = "सादा"> मूल्य) p> <कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "रंग 1"> स्वयं कोड> <कोड वर्ग = "सादा"> ._ मान कोड> <कोड वर्ग = "कीवर्ड" > = कोड> <कोड वर्ग = "सादा"> मान कोड>
<कोड वर्ग = "टिप्पणियां"> # मान हटा दें ‚Äã‚Äã
@ value
.deleter
<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> कोड> <कोड वर्ग = "कीवर्ड"> def कोड> <कोड वर्ग = "सादा"> मान ( कोड> <कोड वर्ग = "रंग 1" > स्वयं कोड> <कोड वर्ग = "सादा">): कोड>
<कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> ( <कोड वर्ग = "स्ट्रिंग"> `मान हटाना` <कोड वर्ग = "सादा">) कोड>
del
self
._ value
<कोड वर्ग = "टिप्पणियां"> # मान पास करें<कोड वर्ग = "सादा"> x कोड> <कोड वर्ग = "कीवर्ड" > = कोड> <कोड वर्ग = "सादा"> वर्णमाला ( <कोड वर्ग = "स्ट्रिंग"> `पीटर` कोड> <कोड वर्ग = "सादा">) कोड> कोड> p>
<कोड वर्ग = "कीवर्ड"> प्रिंट कोड> <कोड वर्ग = "सादा"> (x.value) कोड>
कोड वर्ग = " प्लेन"> x.value
=
`Diesel`
डेल कोड> <कोड क्लास = "सादा"> x.value कोड>
बाहर निकलें: < / मजबूत>
मूल्य प्राप्त करना पीटर डीजल हटाने मूल्य के लिए मूल्य निर्धारित करनाShop
Latest questions
Wiki