Koncepcja programowania obiektowego wiąże się z pojęciem enkapsulacji, czyli ukrywania pól klasy i udostępniania tylko publicznych metod (publicznego API) do odczytu lub zmiany wartości tych pól. W javie np. rozwiązane jest to na poziomie języka za pomocą modyfikatora dostępu – private.
Python nie umożliwia zastosowania takich sposobów hermetyzacji. Stosowanie zmiennych prywatnych w stylu: _zmienna jest tylko kwestią konwencji.
Rozważmy następujący przykład, w którym tworzymy klasę reprezentującą pracownika:
class Employee:
def __init__(self, name, salary, phone):
self.name = name
self.salary = salary
self.phone = phone
W Javie powinniśmy zadeklarować zmienne name, salary i phone jako prywatne i odwoływać się do nich przez metody dostępowe getters /setters. W Pythonie nie zaleca się pisania metod dostępowych, których jedynym zadaniem jest zwracanie wartości atrybutu lub ustawianie wartości atrybutu. Zamiast tego możemy odnosić się do tych pól bezpośrednio. Ma to wiele zalet, ale traci się korzyści z hermetyzacji np.
johnDoe = Employee('John Doe', 8000, '555 111 22 33')
johnDoe.salary = 9000
print(johnDoe.salary)
>>część druga<<