!!! 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. %%info All special methods in Python are surrounded by double underscores. (There are more of these but we'll get to them later.) %% %%filename boo.py %% %%python {{{ class Boo: __init__(self): print('boo!') }}} %% Now let's enter the Python REPL and use our new class: %%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 ("{{b = Boo()}}") and we assigned the object a name "b". Notice that when we created the object, the print line in Boo's constructor was executed ("boo!") # 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))}}") %% %%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