Learning objectives
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.
Concepts in Practice
Defining and using __init__() with parameters
Consider the example above.
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.
Example 11.1
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)
Concepts in Practice
CoffeeOrder instance methods
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)
Try It
Creating a class for vending machines
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