गुण (Properties)

Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

Alex Yarosh

Content Quality Analyst @ DataCamp

एट्रिब्यूट मान बदलना

class Employee:
  def set_name(self, name):
    self.name = name 
  def set_salary(self, salary):
    self.salary = salary 
  def give_raise(self, amount):
    self.salary = self.salary + amount

def __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Use dot syntax and = to alter atributes
emp.salary = emp.salary + 5000
Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

एट्रिब्यूट मान बदलना

class Employee:
  def set_name(self, name):
    self.name = name 
  def set_salary(self, salary):
    self.salary = salary 
  def give_raise(self, amount):
    self.salary = self.salary + amount

def __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Use dot syntax and = to alter atributes
emp.salary = emp.salary + 5000

 

 

एट्रिब्यूट एक्सेस नियंत्रित करें?

  • मान की वैधता जाँचें
  • या एट्रिब्यूट्स को read-only बनाएं
    • सिर्फ set_salary() बदलने से emp.salary = -100 नहीं रुकेगा
Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

प्रतिबंधित और read-only एट्रिब्यूट्स

import pandas as pd
df = pd.DataFrame({"colA": [1,2], "colB":[3,4]})
df
  colA colB
0    1    3
1    2    4
df.columns = ["new_colA", "new_colB"]
df
  new_colA  new_colB
0    1    3
1    2    4
# will cause an error
df.columns = ["new_colA", "new_colB", "extra"]
df
ValueError: Length mismatch: 
Expected axis has 2 elements, 
new values have 3 elements
df.shape = (43, 27)
df
AttributeError: can't set attribute
Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

@property

class Employer:
  def __init__(self, name, new_salary):
     self._salary = new_salary


@property def salary(self): return self._salary
@salary.setter def salary(self, new_salary):
if new_salary < 0: raise ValueError("Invalid salary") self._salary = new_salary

 

← डेटा रखने के लिए अग्रणी _ वाला "protected" एट्रिब्यूट उपयोग करें

← प्रतिबंधित एट्रिब्यूट के ठीक उसी नाम वाले एक method पर @property लगाएँ; आंतरिक एट्रिब्यूट लौटाएँ

obj.attr = value पर कॉल होने वाली मेथड attr() पर @attr.setter लगाएँ

  • असाइन करने वाला मान आर्गुमेंट के रूप में आता है
Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

@property

class Employer:
  def __init__(self, name, new_salary):
     self._salary = new_salary


@property def salary(self): return self._salary
@salary.setter def salary(self, new_salary): if new_salary < 0: raise ValueError("Invalid salary") self._salary = new_salary
emp = Employee("Miriam Azari", 35000)
# accessing the "property"
emp.salary
35000
emp.salary = 60000 # <-- @salary.setter
emp.salary = -1000
ValueError: Invalid salary
Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

क्यों उपयोग करें @property?

  $$\text{\Large{यूज़र के लिए: एट्रिब्यूट जैसा बर्ताव}}$$

 

$$\text{\Large{डेवलपर के लिए: एक्सेस पर नियंत्रण}}$$

Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

अन्य संभावनाएँ

@attr.setter न जोड़ें

read-only प्रॉपर्टी बनाएँ

@attr.getter जोड़ें

जब प्रॉपर्टी का मान पढ़ा जाता है तो कॉल होने वाली मेथड के लिए उपयोग करें

@attr.deleter जोड़ें

जब del से प्रॉपर्टी डिलीट की जाती है तो कॉल होने वाली मेथड के लिए उपयोग करें

Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

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

Python में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

Preparing Video For Download...