Accessing a protected member from outside the class

Accessing a protected member (a member prefixed with _) of a class from outside that class usually calls for trouble, since the creator of that class did not intend this member to be exposed.

Anti-pattern

class Rectangle(object):
    def __init__(self, width, height):
        self._width = width
        self._height = height

r = Rectangle(5, 6)
# direct access of protected member
print("Width: {:d}".format(r._width))

Best practice

If you are absolutely sure that you need to access the protected member from the outside, do the following:

  • Make sure that accessing the member from outside the class does not cause any inadvertent side effects.

  • Refactor it such that it becomes part of the public interface of the class.

References

  • PyLint - W0212, protected-access