Basically, if access is trivial then you may as well keep the attribute public. The extra overhead of a function call and extra lines of code isn't worth it. But when access is non-trivial, that is, you have to do some processing before you can return, then it's good to use `get_*` for your method name because then other developers that follow the same styleguide will know that it's not trivial to access and won't call it excessively (unless it's cached).


```python
def age(self):  # Bad
    return self.age  # Not very useful, easier to just access attribute directly instead of through function call.

def age(self):  # Good
    return self.get_total_days() / 365  # Access is more complex, function call is justified.

def get_age(self):  # Best
    return self.get_total_days() / 365  # Access is more complex and method name follows styleguide (get_* implies non-trivial access)
```