Descriptors
Example 1
class EmpNameDescriptor:
def __get__(self, obj, owner):
return self.__empname
def __set__(self, obj, value):
if not isinstance(value, str):
raise TypeError("'empname' must be a string.")
self.__empname = value
class EmpIdDescriptor:
def __get__(self, obj, owner):
return self.__empid
def __set__(self, obj, value):
if hasattr(obj, 'empid'):
raise ValueError("'empid' is read only attribute")
if not isinstance(value, int):
raise TypeError("'empid' must be an integer.")
self.__empid = value
class Employee:
empid = EmpIdDescriptor()
empname = EmpNameDescriptor()
def __init__(self, emp_id, emp_name):
self.empid = emp_id
self.empname = emp_name
e1 = Employee(123456, 'John')
print(e1.empid, '-', e1.empname)
e1.empname = 'Williams'
print(e1.empid, '-', e1.empname)
e1.empid = 76347322
Output123456 - John
123456 - Williams
Example 2
class Employee:
def __init__(self, emp_id, emp_name):
self.empid = emp_id
self.empname = emp_name
def getEmpID(self):
return self.__empid
def setEmpID(self, value):
if not isinstance(value, int):
raise TypeError("'empid' must be an integer.")
self.__empid = value
empid = property(getEmpID, setEmpID)
def getEmpName(self):
return self.__empname
def setEmpName(self, value):
if not isinstance(value, str):
raise TypeError("empname' must be a string.")
self.__empname = value
def delEmpName(self):
del self.__empname
empname = property(getEmpName, setEmpName, delEmpName)
e1 = Employee(123456, 'John')
print(e1.empid, '-', e1.empname) # -> '123456 - John'
del e1.empname # Deletes 'empname'
print(e1.empname) #Raises 'AttributeError'
123456 - John
AttributeError: ...
Example 3
class Employee:
def __init__(self, emp_id, emp_name):
self.empid = emp_id
self.empname = emp_name
@property
def empid(self):
return self.__empid
@empid.setter
def empid(self, value):
if not isinstance(value, int):
raise TypeError("'empid' must be an integer.")
self.__empid = value
@property
def empname(self):
return self.__empname
@empname.setter
def empname(self, value):
if not isinstance(value, str):
raise TypeError("'empname' must be a string.")
self.__empname = value
@empname.deleter
def empname(self):
del self.__empname
e1 = Employee(123456, 'John')
print(e1.empid, '-', e1.empname) # -> '123456 - John'
del e1.empname # Deletes 'empname'
print(e1.empname) #Raises 'AttributeError'
Output123456 - John
AttributeError: ...
Example 4
# Add Celsius class implementation below.
class Celsius:
def __get__(self):
return float(self._celsius)
def __set__(self, value):
self._celsius = value
# Add temperature class implementation below.
class Temperature:
def __init__(self, fahrenheit):
self._fahrenheit = fahrenheit
self._celsius = self.to_celsius(fahrenheit)
def to_celsius(self, f):
return (f-32) * (5/9)
def getFahrenheit(self):
return self._fahrenheit
def set_fahrenheit(self, value):
self._fahrenheit = value
self._celsius = self.to_celsius(value)
def set_celsius(self,value):
self._fahrenheit = self.to_fahrenheit(value)
Celsius.__set__(self,value)
def to_fahrenheit(self, c):
return (9/5) * c + 32
fahrenheit = property(getFahrenheit,set_fahrenheit)
celsius = property(Celsius.__get__,set_celsius)
No comments:
Post a Comment