DEV Community

loading...

@property decorator

connorbode profile image Connor Bode ・2 min read

Just a quick blurb about a nice feature in Python.

Let's say you have the following:

class Person:
  def __init__(self, first_name, last_name):
    self.first_name = first_name
    self.last_name = last_name

You can create a new person like:

mickey = Person('Micky', 'Mouse')
# spoiler, he's not actually a person

You might find yourself often wanting to get Mickey's full name, "Mickey Mouse" in your code. To do this, you'll probably do:

fullname = mickey.first_name + ' ' + mickey.last_name
# or maybe you'll use format, or printf, 
# depending on your style and how much coffee you've had that day.

Then, after you get tired of doing that all the time, you'll go back and add a method to your Person class:

class Person:
  def __init__(self, first_name, last_name):
    self.first_name = first_name
    self.last_name = last_name

  def name(self):
    return self.first_name + ' ' + self.last_name

and you'll instead use:

mickey.name()
# ==> Mickey Mouse

now.. the @property decorator really just gives us a coding style advantage. mickey.name would feel more natural than mickey.name(), since the name is always returning the same value, and feels more like a property than a function.

So how is it used?

Again, let's modify the class:

class Person:
  def __init__(self, first_name, last_name):
    self.first_name = first_name
    self.last_name = last_name

  @property
  def name(self):
    return self.first_name + ' ' + self.last_name

Then, we can get the name as follows:

mickey.name
# ==> Mickey Mouse

That's it for now! If you're interested in Python, Django, Linux, VIM, tmux (and all these other random tools in my tech stack) follow me on dev.to or on Twitter @connorbode.

I'll post tips as I code!

Discussion

pic
Editor guide