zoukankan      html  css  js  c++  java
  • 016: class and objects > 多重继承与多态的例子

    房屋代理模型:

    1. Property

    class Property(object):
        def __init__(self, square_feet='', num_bedrooms='', num_baths='', **kwargs):
            super().__init__(**kwargs)
            self.square_feet = square_feet
            self.num_bedrooms = num_bedrooms
            self.num_baths = num_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()
    
        def prompt_init():
            return dict(
                square_feet=input("Enter the square feet:"),
                num_bedrooms=input("Enter number of bedrooms:"),
                num_baths=input("Enter number of baths:")
            )    
        prompt_init = staticmethod(prompt_init)                

    2. House

    from Property import Property
    from tools import *
    
    class House(Property):
        valid_garage = ("attached", "detached", "none")
        valid_fenced = ("yes","no")
    
        def __init__(self, num_stories="", garage="", fenced="", **kwargs):
            super().__init__(**kwargs)
            self.num_stories = num_stories
            self.garage = garage
            self.fenced = fenced
        def display(self):
            super().display()
    
            print("HOUSE DETAILS")
    
            print("# of stories: {}".format(self.num_stories))
            print("garage: {}".format(self.garage))
            print("fenced yard: {}".format(self.fenced))
    
        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
        prompt_init = staticmethod(prompt_init)    
    
            

    3. Apartment

    from Property import Property
    from tools import *
    
    class Apartment(Property):
        valid_landries = ("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().dispay()
            print('APARTMENT DETAILS')    
            print('laundry: %s' % self.laundry)
            print('has balcony: %s' % self.balcony)
    
            parent_init = Property.prompt_init()
    
            laundry = get_valid_input("What laundry facilities does the property have?", Apartment.valid_landries)
            balcony = get_valid_input("Does the property have a balcony?", Apartment.valid_balconies)
    
            parent_init.update({"laundry": laundry, "balcony": balcony})
    
            return parent_init
        def prompt_init():
            parent_init = Property.prompt_init()
            balcony = get_valid_input("Is the yard fenced? ", Apartment.valid_balconies)
            laundry = get_valid_input("Is there a garage? ", Apartment.valid_landries)
    
            parent_init.update({
                "balcony": balcony,
                "laundry": laundry
            })    
            return parent_init    
    
        prompt_init = staticmethod(prompt_init)                
    
                

    4. Purchase 与 Rental

    class Purchase(object):
        def __init__(self, price='', taxes='', **kwargs):
            super().__init__()
            self.price = price
            self.taxes = taxes
        
        def display(self):
            super().display()
            print("PURCHASE DETAILS")
            print("selling price: {}".format(self.price))
            print("estimated taxes: {}".format(self.taxes))
    
        def prompt_init():
            return dict(
                price=input("What is the selling price? "),
                taxes=input("What are the estimated taxes? ")
            )    
        prompt_init = staticmethod(prompt_init)    
    
        
    from tools import *
    
    class Rental(object):
        def __init__(self, furnished='', utilities='', rent='', **kwargs):
            super().__init__(**kwargs)
            self.furnished = furnished
            self.utilities = utilities
            self.rent = rent
        def display(self):
            super().display()
            print("RETAL DETAILS")
            print("rent: {}".format(self.rent))
            print("estimated utilities: {}".format(self.utilities))
            print("furnished: {}".format(self.furnished))
    
        def prompt_init():
            return dict(
                rent=input("What is the monly rent? "),
                utilities=input("What are the estimated utilities? "),
                furnished=get_valid_input("Is the propert furnished? ", ("yes", "no"))
            )    
    
        prompt_init = staticmethod(prompt_init)    

    5. 多重继承

    from Purchase import Purchase
    from House import House
    
    class HousePurchase(Purchase, House):
        def prompt_init():
            init = House.prompt_init()
            init.update(Purchase.prompt_init())
    
            return init
    
        prompt_init = staticmethod(prompt_init)    
    
            
    from Rental import Rental
    from House import House
    
    class HouseRental(Rental, House):
        def prompt_init():
            init = House.prompt_init()
            init.update(Rental.prompt_init())
    
            return init
    
        prompt_init = staticmethod(prompt_init)    
    
            
    from Purchase import Purchase
    from Apartment import Apartment
    
    class ApartmentPurchase(Purchase, Apartment):
        def prompt_init():
            init = Apartment.prompt_init()
            init.update(Purchase.prompt_init())
    
            return init
    
        prompt_init = staticmethod(prompt_init)    
    
            
    from Rental import Rental
    from Apartment import Apartment
    
    class ApartmentRental(Rental, Apartment):
        def prompt_init():
            init = Apartment.prompt_init()
            init.update(Rental.prompt_init())
    
            return init
    
        prompt_init = staticmethod(prompt_init)    
    
            

    6. 代理人

    from Property import Property
    from House import House
    from Apartment import Apartment
    from Rental import Rental
    from House import House
    from Rental import Rental
    from Purchase import Purchase
    
    from HouseRental import HouseRental
    from HousePurchase import HousePurchase
    from ApartmentRental import ApartmentRental
    from ApartmentPurchase import ApartmentPurchase
    
    from tools import *
    
    class Agent(object):
        type_map = {
            ("house", "rental"):HouseRental,
            ("house", "purchase"):HousePurchase,
            ("apartment", "rental"):ApartmentRental,
            ("apartment", "purchase"):ApartmentPurchase
        }
        
        def __init__(self):
            self.property_list = []
    
        def display_properies(self):
            print('
    
    
    
    
    
    ')
            print(len(self.property_list))
            for prop in self.property_list:
                prop.display()    
    
        def add_property(self):
            property_type = get_valid_input("what type of property? ", ("house", "apartment")).lower()
            payment_type = get_valid_input("what type of payment? ", ("purchase", "rental")).lower()
    
            PropertyClass = self.type_map[(property_type, payment_type)]
    
            init_args = PropertyClass.prompt_init()
    
            self.property_list.append(PropertyClass(**init_args))    
        

    7. tools

    def get_valid_input(input_string, valid_options):
        input_string += "({})".format(", ".join(valid_options))
        response = input(input_string)
    
        while response.lower() not in valid_options:
            response = input(input_string)
    
        return response    

    8. 主程序

    from Agent import Agent
    
    agent = Agent()
    agent.add_property()
    agent.display_properies()
  • 相关阅读:
    Tensorflow基础教程4:卷积神经网络(CNN)介绍
    Keras之 cifar10数据集使用keras generator读取、模型训练、预测
    Tensorflow基础教程3:基础示例:多层感知机(MLP)
    Tensorflow基础教程2:Tensorflow模型建立与训练
    Chaquopy中不能导入64位Python训练的机器学习模型
    (转)使用SDWebImage和YYImage下载高分辨率图,导致内存暴增的解决办法
    C/C++ 递归与结束递归
    C/C++ 读取文件16进制格式
    C/C++ 打开外部程序
    C/C++ 遍历托盘图标
  • 原文地址:https://www.cnblogs.com/jcsz/p/5154189.html
Copyright © 2011-2022 走看看