Lesson 8
Making Objects the Main Star!
Chapter 6: Object methods
Instance methods
You define methods pretty much just like defining functions, except:
- you put them inside the scope of the class
- the first parameter must be
self
class Person:
def __init__(self, name, age, nationality="uk"):
self.name = name
self.age = age
self.nationality = nationality
def introduce_self(self):
print(f"Hey man! Name's {self.name}, from {self.nationality}!")
def lie_about_age(self):
print(f"I'm {self.age - 5} years old. Really.")
def emigrate(self, new_country):
self.nationality = new_country
def think_random_thought(self):
return "Why is London called London?"
stranger = Person("Josiah", 20, "malaysia")
stranger.emigrate("uk")
stranger.introduce_self()
stranger.lie_about_age()
thought = stranger.think_random_thought()
print(thought)
And here is the output:
Hey man! Name's Josiah, from uk!
I'm 15 years old. Really.
Why is London called London?
Again, self
basically points to the object itself (stranger
in this example).
When you invoke a method (that’s how you formally ‘call’ a method), for example stranger.emigrate("uk")
, Python will actually convert it to Person.emigrate(stranger, "uk")
in the background. This is why there is no need to provide the first argument to self
in the method call, because self
refers to stranger
.
stranger.emigrate("uk")
will change stranger
’s nationality
to "uk"
(again, think of mutator methods like list.clear()
). So when the stranger introduces himself in the next line, he says he’s from "uk"
rather than "malaysia"
.
That’s really it about methods from an implementation standpoint!