Приватные переменные
В Python приватные переменные - это переменные, которые предназначены для использования только внутри класса, в котором они определены, и не должны быть доступны внешнему коду. Приватные переменные не могут быть напрямую доступны извне класса.
Для определения приватной переменной в классе Circle можно использовать префикс двойного подчеркивания (__), за которым следует имя переменной. Например:
class Circle:
def __init__(self, radius):
self.__radius = radius
В этом коде определена приватная переменная __radius в классе Circle.
Приватные переменные предназначены для использования только внутри класса, в котором они определены. Они не могут быть напрямую доступны извне класса. Например, если вы попытаетесь получить доступ к переменной __radius извне класса Circle, возникнет ошибка:
circle1 = Circle(5)
print(circle1.__radius) ## Это вызовет ошибку AttributeError
Приватные переменные полезны для инкапсуляции данных внутри класса и ограничения возможности внешнего кода модифицировать их. Однако важно отметить, что приватные переменные в Python не являются действительно приватными и все еще могут быть доступны извне класса с использованием "искажения имен" (name mangling).
Искажение имен - это техника, которая заключается в добавлении специального префикса к имени переменной, чтобы сделать ее более сложной для доступа извне класса.
Например, переменную __radius все еще можно получить извне класса Circle с использованием следующего синтаксиса:
print(circle1._Circle__radius) ## Это выведет 5
Однако это не считается хорошим практикой программирования и следует избегать.
Вместо этого приватные переменные должны использоваться только внутри класса, в котором они определены, и, если необходимо, должны быть предоставлены публичные методы для доступа или модификации данных.
Вот пример класса Circle с приватной переменной __radius и публичными методами для доступа и изменения радиуса:
class Circle:
def __init__(self, radius):
self.__radius = radius
def get_radius(self):
return self.__radius
def set_radius(self, radius):
self.__radius = radius
Для доступа к радиусу объекта Circle можно использовать метод get_radius:
circle1 = Circle(5)
print(circle1.get_radius()) ## выводит 5
Для изменения радиуса объекта Circle можно использовать метод set_radius:
circle1.set_radius(10)
print(circle1.get_radius()) ## выводит 10