1.2.9. Object-oriented programming (OOP)¶
Python supports object-oriented programming (OOP). The goals of OOP are:
to organize the code, and
to reuse code in similar contexts.
Here is a small example: we create a Student class, which is an object gathering several custom functions (methods) and variables (attributes), we will be able to use:
>>> class Student(object):
... def __init__(self, name):
... self.name = name
... def set_age(self, age):
... self.age = age
... def set_major(self, major):
... self.major = major
...
>>> anna = Student('anna')
>>> anna.set_age(21)
>>> anna.set_major('physics')
In the previous example, the Student class has __init__
, set_age
and
set_major
methods. Its attributes are name
, age
and major
. We
can call these methods and attributes with the following notation:
classinstance.method
or classinstance.attribute
. The __init__
constructor is a special method we call with: MyClass(init parameters if
any)
.
Now, suppose we want to create a new class MasterStudent with the same
methods and attributes as the previous one, but with an additional
internship
attribute. We won’t copy the previous class, but
inherit from it:
>>> class MasterStudent(Student):
... internship = 'mandatory, from March to June'
...
>>> james = MasterStudent('james')
>>> james.internship
'mandatory, from March to June'
>>> james.set_age(23)
>>> james.age
23
The MasterStudent class inherited from the Student attributes and methods.
Thanks to classes and object-oriented programming, we can organize code with different classes corresponding to different objects we encounter (an Experiment class, an Image class, a Flow class, etc.), with their own methods and attributes. Then we can use inheritance to consider variations around a base class and reuse code. Ex : from a Flow base class, we can create derived StokesFlow, TurbulentFlow, PotentialFlow, etc.