11.3: Instance Methods
( \newcommand{\kernel}{\mathrm{null}\,}\)
By the end of this section you should be able to
- Create and implement
__init__()
with multiple parameters including default parameter values. - Describe what information an instance method has access to and can modify.
More about __init__()
In Python, __init__()
is the special method that creates instances. __init__()
must have the calling instance, self
, as the first parameter and can have any number of other parameters with or without default parameter values.
Consider the example above.
def __init__(self, p_id, bp, tmp=-1.0, hr=-1, rr=-1):
def __init__(self, p_id, bp=[-1,-1], tmp=-1.0, hr=-1, rr=-1):
Instance methods
An instance method is used to access and modify instance attributes as well as class attributes. All methods shown so far, and most methods defined in a class definition, are instance methods.
Instance methods are often used to get and set instance information
class ProductionCar:
def __init__(self, make, model, year, max_mph = 0.0):
self.make = make
self.model = model
self.year = year
self.max_mph = max_mph
def max_kmh(self):
return self.max_mph * 1.609344
def update_max(self, speed):
self.max_mph = speed
car_1 = ProductionCar('McLaren', 'Speedtail', 2020) # car_1.max_mph is 0.0
car_1.update_max(250.0) # car_1.max_mph is 250.0
print(car_1.make, car_1.model, 'reaches', car_1.max_mph, 'mph (',
car_1.max_kmh(), 'km/h)') # Prints McLaren Speedtail reaches 250.0 mph (402.336 km/h)
Consider the example below:
class CoffeeOrder:
loc = 'Cafe Coffee'
cls_id = 1
def __init__(self, size=16, milk=False, sugar=False):
self.order_id = CoffeeOrder.cls_id
self.cup_size = size
self.with_milk = milk
self.with_sugar = sugar
CoffeeOrder.cls_id += 1
def change(self, milk, sugar):
self.with_milk = milk
self.with_sugar = sugar
def print_order(self):
print(CoffeeOrder.loc,'Order', self.order_id, ':', self.cup_size, 'oz')
if self.with_milk:
print('\twith milk')
if self.with_sugar:
print('\twith sugar')
order_1 = CoffeeOrder(8)
order_2 = CoffeeOrder(8, True, False)
order_1.change(False, True)
Write a class, VendingMachine
, as described below. Default values follow the attributes. Ex: count'
s default value is 0
. Create a vending machine using a value read from input and call instance methods.
Instance attributes:
- count: 0
- max: 0
Methods:
__init__(num)
: initializes count and max withnum
parameterrefill()
: assignscount
withmax'
s value and prints"Refilled"
sell(order)
: assignscount
with the value ofcount
minusorder
and prints"Sold: [order]"
print_stock()
: prints"Current stock: [count]"
Given input:
100
25
The output is:
Current stock: 100
Sold: 25
Current stock: 75
Refilled
Current stock: 100