|
|
- # python 3 oop - chapter 3 case study
- # simple real estate application
-
-
- class Property:
-
- def __init__(self, square_feet='', beds='', baths='', **kwargs):
- super().__init__(**kwargs)
- self.square_feet = square_feet
- self.num_bedrooms = beds
- self.num_baths = baths
-
- def display(self):
- print("PROPERTY DETAILS")
- print("================")
- print("square footage: {}".format(self.square_feet))
- print("bedrooms: {}".format(self.num_bedrooms))
- print("bathrooms: {}".format(self.num_baths))
- print()
-
- @staticmethod # decorator form of the staticmethod constructor function
- def prompt_init():
- return dict(square_feet=input("Enter the square feet: "),
- beds=input("Enter number of bedrooms: "),
- baths=input("Enter number of baths: "))
-
-
- class Apartment(Property):
-
- # class variables
- valid_laundries = ("coin", "ensuite", "none")
- valid_balconies = ("yes", "no", "solarium")
-
- def __init__(self, balcony = "", laundry = "", **kwargs):
- super().__init__(**kwargs)
- self.balcony = balcony
- self.laundry = laundry
-
- def display(self):
- super().display()
- print("APARTMENT DETAILS")
- print("laundry: %s" % self.laundry)
- print("has balcony: %s" % self.balcony)
-
- @staticmethod
- def prompt_init():
- parent_init = Property.prompt_init()
- laundry = get_valid_input("What laundry facilities does the property"
- "have?", Apartment.valid_laundries)
- balcony = get_valid_input("Does the property have a balcony?",
- Apartment.valid_balconies)
- parent_init.update({
- "laundry" : laundry,
- "balcony" : balcony
- })
- return parent_init
-
-
- class House(Property):
-
- # class variables
- valid_garage = ("attached", "detached", "none")
- valid_fenced = ("yes", "no")
-
- def __init__(self, num_stories = "", garage = "", fenced = "", **kwargs):
- super().__init__(**kwargs)
- self.garage = garage
- self.fenced = fenced
- self.num_stories = num_stories
-
- def display(self):
- super().display()
- print("HOSE DETAILS")
- print ("# of stories: {}".format(self.num_stories))
- print ("garage: {}".format(self.garage))
- print ("fenced yard: {}".format(self.fenced))
-
- @staticmethod
- def prompt_init():
- parent_init = Property.prompt_init()
- fenced = get_valid_input("Is the yard fenced?", House.valid_fenced)
- garage = get_valid_input("Is there a garage?", House.valid_garage)
- num_stories = input("How many stories? ")
- parent_init.update({
- "fenced" : fenced,
- "garage" : garage,
- "num_stories" : num_stories
- })
- return parent_init
-
-
-
- def get_valid_input(input_string, valid_options):
- input_string += " ({}) ".format(", ".join(valid_options))
- response = ""
- while response.lower() not in valid_options:
- response = input(input_string)
- return response
|