पायथन में डिस्क्रिप्टर

| | | | | | | | | | |

डिस्क्रिप्टर प्रोटोकॉल:
अन्य प्रोग्रामिंग भाषाओं में, डिस्क्रिप्टर को सेटर और गेट्टर कहा जाता है, जहां एक निजी चर प्राप्त करने और सेट करने के लिए सार्वजनिक कार्यों का उपयोग किया जाता है। पायथन में निजी चर की कोई अवधारणा नहीं है, और डिस्क्रिप्टर प्रोटोकॉल को इस तरह कुछ हासिल करने के लिए पाइथोनिक तरीके के रूप में सोचा जा सकता है। वर्णनकर्ता — यह पायथन में कक्षाओं को लागू करने का एक नया तरीका है, और इसे किसी विशेष वस्तु से कुछ भी प्राप्त करने की आवश्यकता नहीं है। पायथन में डिस्क्रिप्टर को आसानी से लागू करने के लिए, हमें ऊपर परिभाषित विधियों में से कम से कम एक का उपयोग करना चाहिए। ध्यान दें कि नीचे दिया गया उदाहरण उस ऑब्जेक्ट को लौटाता है जिसे विशेषता द्वारा एक्सेस किया गया था और स्वामी वह वर्ग है जिसमें हैंडल को एक विशेषता के रूप में असाइन किया गया था। सेटर्स, गेटर्स और डिलीट मेथड के लिए पायथन डिस्क्रिप्टर में तीन प्रोटोकॉल हैं।

  • 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 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.नाम)

बाहर निकलें:

Python.Engineering

कोड 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 "

Print (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

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