0Pricing
Python For Kids · Урок

Инкапсуляция

Изучите продвинутые концепции ООП.

«Инкапсуляция» — бесплатный урок Python For Kids на CoddyKit. Это урок 4 из 5. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python For Kids, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python For Kids содержит 5 уроков всего.

Инкапсуляция

С возвращением на урок по объектно-ориентированному программированию (ООП)! Сегодня Вы узнаете об инкапсуляции в Python — важном понятии, которое помогает защищать данные и методы внутри классов.

Инкапсуляция — иллюстрация 1

Что такое инкапсуляция?

Инкапсуляция — это объединение данных (attributes) и методов (функций), работающих с этими данными, в едином объекте, называемом классом. Она также ограничивает прямой доступ к некоторым компонентам объекта, скрывая его внутреннее представление от внешнего кода.

  • Сокрытие данных: Защита внутреннего состояния объекта от непреднамеренного вмешательства.
  • Контроль доступа: Определение способов доступа к данным и методам и их изменения.

Инкапсуляция позволяет объектам самостоятельно управлять своими данными и предоставлять только необходимую информацию.

Модификаторы доступа

В Python инкапсуляция реализуется с помощью модификаторов доступа, которые управляют видимостью членов класса (attributes и методов). Существует три типа модификаторов доступа:

  • Открытые: Доступны откуда угодно.
  • Защищённые: Доступны внутри класса и его дочерних классов.
  • Закрытые: Доступны только внутри самого класса.

Давайте посмотрим, как использовать эти модификаторы доступа в Python.

Открытые attributes и методы

Открытые члены доступны за пределами класса. По умолчанию все attributes и методы являются открытыми, если не указано иное.

Пример:

# Defines the Person class with public attributes and methods
class Person:
    def __init__(self, name, age):
        self.name = name  # Public attribute
        self.age = age    # Public attribute

    def greet(self):
        print("Hello, my name is " + self.name + "!")  # Public method

# Creates an object of the Person class
person1 = Person("Alice", 30)

# Accesses public attributes and methods
print(person1.name)  # Output: Alice
person1.greet()      # Output: Hello, my name is Alice!

Защищённые attributes и методы

Защищённые члены обозначаются префиксом из одного символа подчёркивания (_). Они доступны внутри класса и его дочерних классов, но к ним не следует обращаться напрямую из-за пределов класса.

Пример:

# Defines the Employee class with protected attributes and methods
class Employee:
    def __init__(self, name, salary):
        self._name = name      # Protected attribute
        self._salary = salary  # Protected attribute

    def _increase_salary(self, amount):
        self._salary += amount  # Protected method
        print(self._name + "'s new salary is " + str(self._salary))

# Creates an object of the Employee class
employee1 = Employee("Bob", 50000)

# Accesses protected attributes and methods (not recommended)
print(employee1._name)  # Output: Bob
employee1._increase_salary(5000)  # Output: Bob's new salary is 55000

Закрытые attributes и методы

Закрытые члены обозначаются префиксом из двух символов подчёркивания (__). Они доступны только внутри самого класса, и к ним нельзя обращаться напрямую из-за его пределов.

Пример:

# Defines the BankAccount class with private attributes and methods
class BankAccount:
    def __init__(self, owner, balance):
        self.__owner = owner    # Private attribute
        self.__balance = balance  # Private attribute

    def deposit(self, amount):
        self.__balance += amount  # Modifies private attribute
        print("Deposited:", amount)
        self.__show_balance()

    def __show_balance(self):
        print("Current Balance:", self.__balance)  # Private method

# Creates an object of the BankAccount class
account1 = BankAccount("Charlie", 1000)

# Attempts to access private attributes and methods (will cause errors)
# print(account1.__owner)        # AttributeError
# account1.__show_balance()      # AttributeError

# Uses public methods to interact with private attributes
account1.deposit(500)  # Output:
                        # Deposited: 500
                        # Current Balance: 1500

Зачем нужна инкапсуляция?

Инкапсуляция даёт несколько преимуществ:

  • Контроль: Контроль доступа к данным и их изменения.
  • Безопасность: Защита внутреннего состояния объекта от непреднамеренных изменений.
  • Удобство сопровождения: Код проще поддерживать, и он менее подвержен ошибкам.

Инкапсуляция помогает создавать надёжные и безопасные приложения.

Пример инкапсуляции: класс Car

Создадим класс Car, использующий инкапсуляцию для защиты своих атрибутов и методов.

Код:

# Defines the Car class with encapsulated attributes and methods
class Car:
    def __init__(self, make, model, year):
        self.make = make          # Public attribute
        self.model = model        # Public attribute
        self.__year = year        # Private attribute

    def get_year(self):
        return self.__year  # Public method to access private attribute

    def set_year(self, year):
        if year > 0:
            self.__year = year  # Public method to modify private attribute
            print("Year updated to", self.__year)
        else:
            print("Invalid year!")

    def __display_info(self):
        print(self.make, self.model, self.__year)  # Private method

    def show_info(self):
        self.__display_info()  # Public method that calls a private method

# Creates an object of the Car class
car1 = Car("Tesla", "Model S", 2020)

# Accesses public attributes and methods
print(car1.make)        # Output: Tesla
print(car1.get_year())  # Output: 2020

# Modifies the private attribute using a public method
car1.set_year(2021)     # Output: Year updated to 2021

# Calls a public method that interacts with a private method
car1.show_info()        # Output: Tesla Model S 2021

# Attempts to access private attributes and methods directly (will cause errors)
# print(car1.__year)         # AttributeError
# car1.__display_info()      # AttributeError
# Defines the Student class with encapsulated attributes
class Student:
    def __init__(self, name, grade):
        self.name = name      # Public attribute
        self.__grade = grade  # Private attribute

    def get_grade(self):
        return self.__grade  # Public method to access private attribute

    def set_grade(self, grade):
        if 0 <= grade <= 100:
            self.__grade = grade  # Updates the grade
        else:
            print("Invalid grade!")

# Creates an object of the Student class
student1 = Student("Diana", 85)

# Accesses and modifies the grade using public methods
print(student1.get_grade())  # Output: 85
student1.set_grade(90)
print(student1.get_grade())  # Output: 90

# Attempts to access the private attribute directly (will cause an error)
# print(student1.__grade)     # AttributeError

Отличная работа!

Вы научились использовать инкапсуляцию в Python для защиты данных и методов внутри классов. Инкапсуляция помогает контролировать доступ к данным объекта, делая программы более безопасными и удобными для сопровождения. Продолжайте практиковаться: создавайте классы с подходящими модификаторами доступа, чтобы совершенствовать свои навыки программирования!

Инкапсуляция — иллюстрация 10

Часто задаваемые вопросы

Урок «Инкапсуляция» бесплатный?

Да — полный текст урока «Инкапсуляция» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python For Kids, подпишись на CoddyKit PRO. Курс Python For Kids содержит 5 уроков всего.

Чему я научусь в уроке «Инкапсуляция»?

Изучите продвинутые концепции ООП. Ты практикуешь Python For Kids с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python For Kids?

Предыдущий опыт не требуется. Python For Kids на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 5.

Сколько времени занимает урок «Инкапсуляция»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python For Kids?

Да. Каждый урок Python For Kids включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Введение в ООП
  2. Создание классов и объектов
  3. Наследование
  4. Инкапсуляция
  5. Полиморфизм
← Назад к Python For Kids