खोज…


वाक्य - विन्यास

  • x.title # Accesses the title attribute using the dot notation
  • x.title = "Hello World" # Sets the property of the title attribute using the dot notation
  • @property # Used as a decorator before the getter method for properties
  • @title.setter # Used as a decorator before the setter method for properties

डॉट नोटेशन का उपयोग करते हुए मूल गुण प्रवेश

चलो एक नमूना वर्ग लेते हैं।

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

book1 = Book(title="Right Ho, Jeeves", author="P.G. Wodehouse")

पायथन में आप डॉट नोटेशन का उपयोग करके कक्षा के विशेषता शीर्षक तक पहुंच सकते हैं।

>>> book1.title 
'P.G. Wodehouse'

यदि कोई विशेषता मौजूद नहीं है, तो पायथन एक त्रुटि फेंकता है:

>>> book1.series
Traceback  (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Book' object has no attribute 'series'

सेटर्स, गेटर्स एंड प्रॉपर्टीज

डेटा एनकैप्सुलेशन के लिए, कभी-कभी आप एक विशेषता रखना चाहते हैं, जो अन्य विशेषताओं से या सामान्य रूप से, जो मूल्य की गणना वर्तमान में की जाएगी। इस स्थिति से निपटने का मानक तरीका एक विधि बनाना है, जिसे गेट्टर या सेटर कहा जाता है।

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

उपरोक्त उदाहरण में, यह देखना आसान है कि क्या होता है यदि हम एक नई पुस्तक बनाते हैं जिसमें एक शीर्षक और एक लेखक होता है। यदि हमारी लाइब्रेरी में शामिल होने वाली सभी पुस्तकों में लेखक और शीर्षक हैं, तो हम गेटर्स और सेटर को छोड़ सकते हैं और डॉट नोटेशन का उपयोग कर सकते हैं। हालाँकि, मान लीजिए कि हमारे पास कुछ किताबें हैं जिनके पास लेखक नहीं है और हम लेखक को "अज्ञात" पर सेट करना चाहते हैं। या अगर उनके पास कई लेखक हैं और हम लेखकों की सूची वापस करने की योजना बना रहे हैं।

इस मामले में हम लेखक विशेषता के लिए एक गेट्टर और एक सेटर बना सकते हैं।

class P:
    def __init__(self,title,author):
        self.title = title
        self.setAuthor(author)

    def get_author(self):
        return self.author

    def set_author(self, author):
        if not author: 
            self.author = "Unknown"
        else:
            self.author = author

यह योजना अनुशंसित नहीं है।

एक कारण यह है कि एक पकड़ है: मान लेते हैं कि हमने अपनी कक्षा को सार्वजनिक विशेषता और किसी भी तरीके से डिज़ाइन नहीं किया है। लोग पहले ही इसका इस्तेमाल कर चुके हैं और उन्होंने इस तरह कोड लिखा है:

>>> book = Book(title="Ancient Manuscript", author="Some Guy")
>>> book.author = ""  #Cos Some Guy didn't write this one!

अब हमें एक समस्या है। क्योंकि लेखक कोई विशेषता नहीं है! पायथन गुण नामक इस समस्या का समाधान प्रस्तुत करता है। गुण प्राप्त करने का एक तरीका हैडर से पहले @property से सजाया गया है। जिस विधि से हम एक सेटर के रूप में कार्य करना चाहते हैं, उसे पहले @ Attemame.setter से सजाया गया है।

इसे ध्यान में रखते हुए, अब हमारे पास अपना नया अपडेटेड वर्ग है।

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    @property
    def author(self):
        return self.__author

    @author.setter
    def author(self, author):
        if not author: 
            self.author = "Unknown"
        else:
            self.author = author

ध्यान दें, आम तौर पर अजगर आपको एक ही नाम और विभिन्न मापदंडों के साथ कई तरीके रखने की अनुमति नहीं देता है। हालांकि, इस मामले में पायथन इस वजह से अनुमति देता है क्योंकि सज्जाकार इस्तेमाल करते हैं।

यदि हम कोड का परीक्षण करते हैं:

>>> book = Book(title="Ancient Manuscript", author="Some Guy")
>>> book.author = ""  #Cos Some Guy didn't write this one!
>>> book.author 
Unknown 


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow