FAQ: Object-Oriented Programming - OOP Pillar: Encapsulation

This community-built FAQ covers the “OOP Pillar: Encapsulation” exercise from the lesson “Object-Oriented Programming”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Learn Intermediate Python 3

FAQs on the exercise OOP Pillar: Encapsulation

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in Language Help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to Language Help and Tips and Resources. If you are wanting feedback or inspiration for a project, check out Projects.

Looking for motivation to keep learning? Join our wider discussions in Community

Learn more about how to use this guide.

Found a bug? Report it online, or post in Bug Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

Sorry, I don’t know the rules quite enough, please check if I can say about it here!!! BUt for Russian speaking AND those who are not completely sure that they understand why is it needed to use the concepts “private, protected, public” IF "Python doesn’t have any inbuilt mechanism to prevent access from any member (i.e. all members are public in Python). "
Приватные методы без нижнего подчеркивания и интерфейсы в Python / Хабр
Thank you, dmytrostriletskyi Helped a lot.

1 Like

In the course, it says private class member can still be accessed publicly, but when I tried to print the private member in this code, I received an AttributeError. Why is this?

class Employee(): def __init__(self): self.id = None # Write your code below self._id = 0 self.__id = 1 e = Employee() print(dir(e)) print(e.__id)
1 Like

Because methods starting with a double underscore __name are treated differently and undergo name mangling: https://docs.python.org/3/reference/expressions.html#atom-identifiers. You’d have to use the mangled name if you really wanted to access the attribute which in this case would be e._Employee__id. Name mangling is pretty uncommon in Python so consider carefully whether or not you actually want to be using it.

2 Likes

I have a basic question about the terminology used by Codecademy below:

‘An instance variable e is defined …’

Is e in this example not better referred to as a ‘class object’ rather than an ‘instance variable’?
My understanding was that an instance variable can also be called an instance attribute, and refers to attributes which are not shared by the objects that are part of a class. Please let me know if I am mistaken here - appreciate any links to a helpful summary of terminology if relevant!

Thanks

E is an instance of the class here. An instance attribute is an attribute of the specific instance of the class, e.g. whatever the employee’s id number is would be an attribute of the instance (the specific employee). You’re correct that instance attributes are not necessarily shared by the class, although this may not be the case when working with default parameters in class constructors. Hope this helps!