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
डिस्क्रिप्टर वे ऑब्जेक्ट हैं जो किसी एट्रिब्यूट को प्राप्त करने, सेट करने, या डिलीट करने के तरीके को नियंत्रित करते हैं
@property से डिस्क्रिप्टर बनाएँ
डिस्क्रिप्टर इनसे भी बनाए जा सकते हैं...
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")
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 से इंटरैक्ट करें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 से इंटरैक्ट करें!
class Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn
...
@ssn.deleter
def ssn(self):
# क्लीन-अप, सॉफ्ट डिलीट, या एक्सेप्शन उठा सकते हैं
raise AttributeError("Can't delete SSN")
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