I have a project I am working on, and I have a Python Class object that works fine, but I'm curious if it's designed properly when I call the
Right now, I have a function (
demand_curve) that will run when you create a new instance of the class object. Is it okay if I run a function when I initialize the class or will it leave me open to problems down the road?
Here is the full code for your reference:
# initalize the lists prices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] quantities = [13.75, 12.5, 11.25, 10.0, 8.75, 7.5, 6.25, 5.0, 3.75, 2.5, 1.25, 0.0] class MarketFunction(object): def __init__(self, prices, quantities): self.prices = prices self.quantities = quantities self.intercept = None self.slope = None # Run the demand_curve function to calculate the slope and the intercept. self.demand_curve(prices, quantities) @property def DemandIntercept(self): ''' SUMMARY: Return the intercept of the demand curve. RETURN TYPE: float ''' if self.intercept is None: intercept = self.demand_curve(self.prices, self.quantities) self.intercept = intercept return self.intercept @property def MaxPrice(self): ''' SUMMARY: Return the maximum price from the Prices list. RETURN TYPE: float ''' return max(self.prices) @property def MinPrice(self): ''' SUMMARY: Return the minimum price from the Prices list. RETURN TYPE: float ''' return min(self.prices) @property def MaxQuantity(self): ''' Summary: Return the maximum quantity from the Quantities list. RETURN TYPE: int ''' return max(self.prices) @property def MinQuantity(self): ''' SUMMARY: Return the minimum quantity from the Quantities list. RETURN TYPE: int ''' return min(self.quantities) def demand_curve(self, prices, quantities): ''' SUMMARY: Given an array of prices and quantities calculate the slope and Y-intercept of the line and set the values for the MarketFunction object. PARA prices: A list of prices PARA TYPE: list PARA quantites: A list of quantites PARA TYPE: list ''' # grab the first few values. x0, x1 = prices, prices y0, y1 = quantities, quantities # calculate the metrics slope = (y1 - y0)/(x1 - x0) y_int = (-slope * x0) + y0 self.intercept = y_int self.slope = slope # create a new instance of the object market = MarketFunction(prices = prices, quantities = quantities) # Grab the DemandIntercept demand_function = market.DemandIntercept demand_function