!!! Classes and Methods

%%info
This is __Exercise 4__ of the [Micro Python Tutorial].
%%

We can define __classes__ in Python. Classes are defined globally, within the file/module as they begin in column 0.

Within a class its functions are called __methods__. Unlike functions, methods are defined within the scope of the class and are therefore indented within the class's block.

A class has a __constructor__, a special method named {{{__init__}}}. The constructor is called when you create a new object of the class. It can be said that the new object has a type of its class. 

%%filename boo.py %%
%%python {{{
class Boo:
    __init__(self):
        print('boo!')
}}} %%
%%repl {{{
/pyboard> repl
Entering REPL. Use Control-X to exit.
>
MicroPython v1.25.0 on 2025-04-15; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> 
>>> from boo import Boo
>>> b = Boo()
boo!
>>> 
>>> print(b)
<Boo object at 20005f50>
>>>
>>> print(type(b))
<class 'Boo'>
>>> 
}}}

%%info 
__What did we do?__ 
After creating a class named Boo, we imported the class ("from boo import Boo") so the interpreter was aware of it, then we ''instantiated'' (created an instance of) an object of the Boo class and we assigned the object a name "b". Then we printed the object (the interpreter returned a default result "<Boo object at 20005f50>"), then we printed the type of the object ("print(type(b))".
%%

All special methods in Python are surrounded by double underscores. (There are more of these but we'll get to them later.)

%%filename motor_controller.py %%
%%python {{{
from motor import Motor

class MotorController:

    def __init__(self):
      self.port_forward_motor = Motor('pfwd')
      self.stbd_forward_motor = Motor('sfwd')
      print('motor controller ready.')
}}}
%%

%%filename motor.py %%
%%python {{{
class Motor:
    def __init__(self, name):
        self.motor_name = name
        self.motor_speed = 0
        print('motor {} ready.'.format(self.motor_name))
        
    def set_speed(self, speed):
        self.motor_speed = speed
        print("speed: {}".format(speed))

    def get_speed(self):
        return self.motor_speed
}}}
%%

%%filename main.py %%
%%python {{{
from motor_controller import MotorController

try:

    motor_ctrl = MotorController()

except Exception as ex:
    print('an error occurred: {}'.format(ex))
finally:
    print('complete.')
}}}
%%

----
__Previous:__ [MicroPython Tutorial Exercise 3|MicroPythonTutorialExercise03]: functions \\
__Next:__ [MicroPython Tutorial Exercise 5|MicroPythonTutorialExercise05]: using classes