डिस्क्रिप्टर

Intermediate Object-Oriented Programming in Python

Jake Roach

Data Engineer

एट्रिब्यूट के साथ इंटरैक्शन बदलना

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn
# एक student ऑब्जेक्ट बनाएँ, और "ssn" एट्रिब्यूट एक्सेस करें
shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn)

# अगर वैल्यू बदल दी जाए या डिलीट हो जाए तो क्या होगा? इसे कैसे हैंडल करें?
193-80-1821
Intermediate Object-Oriented Programming in Python

@property से डिस्क्रिप्टर बनाना

डिस्क्रिप्टर वे ऑब्जेक्ट हैं जो किसी एट्रिब्यूट को प्राप्त करने, सेट करने, या डिलीट करने के तरीके को नियंत्रित करते हैं

@property से डिस्क्रिप्टर बनाएँ

  • "getter", "setter", "deleter"
  • मेथड का नाम == एट्रिब्यूट का नाम।

डिस्क्रिप्टर इनसे भी बनाए जा सकते हैं...

  • property() फंक्शन
  • __get__(), __set__(), __delete__()

$$

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn

    @property  
    def ssn(self):
        return "XXX-XX-" + self._ssn[-4:]

    @ssn.setter  
    def ssn(self, new_ssn):
        self._ssn = new_ssn 

    @ssn.deleter
    def ssn(self):
        raise AttributeError("Can't delete SSN")
Intermediate Object-Oriented Programming in Python

@property

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn  # शुरुआत में अंडरस्कोर होना जरूरी नहीं

    @property  
    def ssn(self):  # यह "getter" मेथड है
        return "XXX-XX-" + self._ssn[-4:]
  • ssn कैसे रिट्रीव होगा, इसे नियंत्रित करता है
  • self.ssn नहीं, self._ssn से इंटरैक्ट करें
Intermediate Object-Oriented Programming in Python

@ssn.setter

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn
    ...

    @ssn.setter  
    def ssn(self, new_ssn):
        if len(new_ssn) == 11:
          # यहाँ data जैसी चीजें जोड़ें 
          # validation, अन्य एट्रिब्यूट्स पर
          # ऑपरेशन, आदि.
          self._ssn = new_ssn

@<attribute-name>.setter

  • ssn का "setter" मेथड
  • डेटा क्वालिटी वैलिडेट करें
  • अन्य एट्रिब्यूट्स पर ऑपरेशन करें

$$

$$

$$

ध्यान रखें: self.ssn नहीं, self._ssn से इंटरैक्ट करें!

Intermediate Object-Oriented Programming in Python

@ssn.deleter

class Student:
    def __init__(self, name, ssn):
        self.name = name
        self.ssn = ssn

    ...

    @ssn.deleter
    def ssn(self):
        # क्लीन-अप, सॉफ्ट डिलीट, या एक्सेप्शन उठा सकते हैं
        raise AttributeError("Can't delete SSN")
Intermediate Object-Oriented Programming in Python

डिस्क्रिप्टर का उपयोग

shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn)  # ssn एट्रिब्यूट एक्सेस करें
XXX-XX-1821
shaw.ssn = "821-11-9380"  # Shaw का social security number अपडेट करें
print(shaw.ssn)
XXX-XX-9380
del shaw.ssn  # ssn एट्रिब्यूट डिलीट करने की कोशिश
AttributeError: Can't delete SSN
Intermediate Object-Oriented Programming in Python

अभ्यास करते हैं!

Intermediate Object-Oriented Programming in Python

Preparing Video For Download...