Python For Kids · Les

Inkapseling

Verken geavanceerde OOP-concepten.

Les 4 van 510 stappen

Inkapseling is een gratis Python For Kids-les op CoddyKit. Dit is les 4 van 5. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python For Kids. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python For Kids bevat in totaal 5 lessen.

Inkapseling

Welkom terug bij de les Objectgeoriënteerd programmeren (OOP)! Vandaag leren we over inkapseling in Python, een belangrijk concept dat helpt om je gegevens en methoden binnen klassen te beschermen.

Inkapseling — illustratie 1

Wat is inkapseling?

Inkapseling is het concept waarbij gegevens (attributen) en methoden (functies) die met deze gegevens werken, worden gebundeld in één geheel, een klasse genoemd. Ook wordt directe toegang tot bepaalde onderdelen van een object beperkt. Hierdoor blijft de interne voorstelling van een object verborgen voor de buitenwereld.

  • Gegevens verbergen: De interne toestand van een object beschermen tegen onbedoelde beïnvloeding.
  • Toegangsbeheer: Bepalen hoe gegevens en methoden kunnen worden benaderd of gewijzigd.

Inkapseling zorgt ervoor dat objecten hun eigen gegevens beheren en alleen het noodzakelijke beschikbaar maken.

Toegangsmodificatoren

In Python wordt inkapseling geïmplementeerd met toegangsmodificatoren om de zichtbaarheid van onderdelen van een klasse (attributen en methoden) te beheren. Er zijn drie typen toegangsmodificatoren:

  • Openbaar: Overal toegankelijk.
  • Beschermd: Toegankelijk binnen de klasse en haar subklassen.
  • Privé: Alleen toegankelijk binnen de klasse zelf.

Laten we bekijken hoe je deze toegangsmodificatoren in Python gebruikt.

Openbare attributen en methoden

Openbare onderdelen zijn toegankelijk buiten de klasse. Standaard zijn alle attributen en methoden openbaar, tenzij anders aangegeven.

Voorbeeld:

# 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!

Beschermde attributen en methoden

Beschermde onderdelen worden aangegeven met een enkel onderstrepingsteken (_) als voorvoegsel. Ze zijn toegankelijk binnen de klasse en haar subklassen, maar mogen niet rechtstreeks van buiten de klasse worden benaderd.

Voorbeeld:

# 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

Privéattributen en -methoden

Privéonderdelen worden aangegeven met een dubbel onderstrepingsteken (__) als voorvoegsel. Ze zijn alleen toegankelijk binnen de klasse zelf en kunnen niet rechtstreeks van buiten de klasse worden benaderd.

Voorbeeld:

# 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

Waarom inkapseling gebruiken?

Inkapseling biedt verschillende voordelen:

  • Beheer: Bepalen hoe de gegevens worden benaderd of gewijzigd.
  • Beveiliging: De interne toestand van een object beschermen tegen onbedoelde wijzigingen.
  • Onderhoudbaarheid: De code wordt eenvoudiger te onderhouden en bevat minder fouten.

Inkapseling helpt bij het bouwen van robuuste en veilige toepassingen.

Voorbeeld van inkapseling: de klasse Car

We maken een klasse Car die inkapseling gebruikt om de kenmerken en methoden ervan te beschermen.

Code:

# 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

Goed gedaan!

Je hebt geleerd hoe je inkapseling in Python gebruikt om je gegevens en methoden binnen klassen te beschermen. Met inkapseling regel je de toegang tot de gegevens van je object, waardoor je programma's veiliger en beter onderhoudbaar worden. Blijf oefenen door klassen te ontwerpen met geschikte toegangsmodificatoren om je programmeervaardigheden te verbeteren!

Inkapseling — illustratie 10
Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
22
Lessen
94

Veelgestelde vragen

Is de les “Inkapseling” gratis?

Ja — de volledige tekst van “Inkapseling” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python For Kids wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python For Kids bevat in totaal 5 lessen.

Wat leer ik in “Inkapseling”?

Verken geavanceerde OOP-concepten. Je oefent met Python For Kids door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python For Kids te beginnen?

Ervaring vooraf is niet nodig. Python For Kids op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 5.

Hoe lang duurt de les “Inkapseling”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python For Kids?

Ja. Elke les over Python For Kids bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Inleiding tot OOP
  2. Klassen en objecten maken
  3. Overerving
  4. Inkapseling
  5. Polymorfisme
← Terug naar Python For Kids