xxxxxxxxxx
class TreasureBoX:
def __init__(self, treasure="Nothing Valueable Inside"):
self._treasure = treasure
@property
def get_treasure(self):
print(f"The TreasureBoX contains {self._treasure}")
return self._treasure
def set_treasure(self, treasure):
if isinstance(self._treasure, str):
self._treasure = treasure
else:
print("Not a Valid Treasure")
print(f"The TreasureBoX contains {self._treasure}")
obj = TreasureBoX()
treasure = obj.get_treasure #we don't need () cause we used @property decorator
obj.set_treasure("Diamond")
try:
obj.set_treasure(10) # This will print "Not a Valid Treasure"
except Exception as e:
print(f'Invalid treasure getting error{e}')
python setter
xxxxxxxxxx
class Foo:
def __init__(self):
self._bar = 0
@property #this is also automatically the getter
def bar(self):
return self._bar
@bar.setter
def bar(self, value):
self._bar = value
a = Foo()
a.bar = 2 # sets a._bar to 2
print(a.bar) # outputs 2
xxxxxxxxxx
class Car():
def __init__(self):
self._seat = None
@property # getter
def seat(self):
return self._seat
@seat.setter # setter
def seat(self, seat):
self._seat = seat
c = Car()
c.seat = 6
print(c.seat)
xxxxxxxxxx
class Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn # Does not need to include an underscore
@property # This is the "getter" method
def ssn(self):
return "XXX-XX-" + self._ssn[-4:] # Notice the underscore
@ssn.setter # This is the "setter" method
def ssn(self, new_ssn):
if len(new_ssn) == 12:
# Add things such as data validation, operations on other attributes, etc.
self._ssn = new_ssn # Notice the underscore
@ssn.deleter # This is the "disposer" method
def ssn(self):
raise AttributeError("Can't delete SSN") # Can perform clean up, soft delete, raise exception
def __getattr__(self, name):
print(f"""{name} does not exist""")
def __setattr__(self, name, value):
if isinstance(value, str): # Check if value is a string,
print(f"Setting {name} = {value}")
self.__dict__[name] = value # set the attribute using the __dict__ attribute
else: # Otherwise, raise an exception noting an incorrect data type
raise Exception("Unexpected data type!")
shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn) # calling the "getter"
shaw.ssn = "821-11-9380" # calling the "setter"
del shaw.ssh # calling the "deleter"
xxxxxxxxxx
class Person:
# Constructor
def __init__(self, name, age):
# Since we making getters and setters, we should mangle the varible names to make them "private" by adding 2 underscores.
self.__name = name
self.__age = age
# Getters
def get_name(self):
return __self.name
def get_age(self):
return __self.age
# Setters
def set_name(self, new_name):
self.__name = new_name
def set_age(self, new_age):
self.__age = new_age
xxxxxxxxxx
class MyClass:
def __init__(self):
self._my_variable = None
@property
def my_variable(self):
return self._my_variable
@my_variable.setter
def my_variable(self, value):
self._my_variable = value
# Usage:
obj = MyClass()
obj.my_variable = 10 # Setter
print(obj.my_variable) # Getter