Python For Kids · Lektion

Indkapsling

Udforsk avancerede OOP-koncepter.

Lektion 4 af 510 trin

Indkapsling er en gratis Python For Kids-lektion på CoddyKit. Dette er lektion 4 af 5. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python For Kids, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python For Kids-kurset indeholder 5 lektioner i alt.

Indkapsling

Velkommen tilbage til lektionen om objektorienteret programmering (OOP)! I dag lærer vi om indkapsling i Python, et centralt begreb, der hjælper med at beskytte dine data og metoder i klasser.

Indkapsling — illustration 1

Hvad er indkapsling?

Indkapsling er begrebet at samle data (attributter) og metoder (funktioner), der arbejder på disse data, i en enkelt enhed, som kaldes en klasse. Det begrænser også direkte adgang til nogle af objektets komponenter, hvilket betyder, at et objekts interne repræsentation skjules for omverdenen.

  • Dataskjul: Beskyttelse af et objekts interne tilstand mod utilsigtet påvirkning.
  • Adgangskontrol: Definition af, hvordan data og metoder kan tilgås eller ændres.

Indkapsling sikrer, at objekter selv styrer deres data og kun eksponerer det, der er nødvendigt.

Adgangsmodifikatorer

I Python implementeres indkapsling ved hjælp af adgangsmodifikatorer, der styrer synligheden af klassens medlemmer (attributter og metoder). Der findes tre typer adgangsmodifikatorer:

  • Offentlig: Kan tilgås overalt.
  • Beskyttet: Kan tilgås i klassen og dens underklasser.
  • Privat: Kan kun tilgås i selve klassen.

Lad os se, hvordan du bruger disse adgangsmodifikatorer i Python.

Offentlige attributter og metoder

Offentlige medlemmer kan tilgås uden for klassen. Som standard er alle attributter og metoder offentlige, medmindre andet angives.

Eksempel:

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

Beskyttede attributter og metoder

Beskyttede medlemmer angives med et enkelt understregningstegn (_) som præfiks. De kan tilgås i klassen og dens underklasser, men bør ikke tilgås direkte uden for klassen.

Eksempel:

# 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

Private attributter og metoder

Private medlemmer angives med to understregningstegn (__) som præfiks. De kan kun tilgås i selve klassen og kan ikke tilgås direkte uden for klassen.

Eksempel:

# 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

Hvorfor bruge indkapsling?

Indkapsling giver flere fordele:

  • Kontrol: Styrer, hvordan data tilgås eller ændres.
  • Sikkerhed: Beskytter et objekts interne tilstand mod utilsigtede ændringer.
  • Vedligeholdelse: Gør koden nemmere at vedligeholde og mindre tilbøjelig til fejl.

Indkapsling hjælper med at opbygge robuste og sikre applikationer.

Eksempel på indkapsling: Klassen Car

Lad os oprette en Car-klasse, der bruger indkapsling til at beskytte sine attributter og metoder.

Kode:

# 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

Godt gået!

Du har lært at bruge indkapsling i Python til at beskytte dine data og metoder i klasser. Indkapsling hjælper dig med at kontrollere adgangen til dine objekters data, så dine programmer bliver mere sikre og lettere at vedligeholde. Bliv ved med at øve dig ved at designe klasser med passende adgangsmodifikatorer for at styrke dine programmeringsfærdigheder!

Indkapsling — illustration 10
Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
22
Lektioner
94

Ofte stillede spørgsmål

Er lektionen “Indkapsling” gratis?

Ja — hele teksten til “Indkapsling” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python For Kids-kurset, skal du opgradere til CoddyKit PRO. Python For Kids-kurset indeholder 5 lektioner i alt.

Hvad lærer jeg i “Indkapsling”?

Udforsk avancerede OOP-koncepter. Du øver dig i Python For Kids med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Python For Kids?

Der kræves ingen tidligere erfaring. Python For Kids på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 5.

Hvor lang tid tager lektionen “Indkapsling”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Python For Kids-lektion?

Ja. Alle Python For Kids-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Introduktion til OOP
  2. Oprettelse af klasser og objekter
  3. Nedarvning
  4. Indkapsling
  5. Polymorfi
← Tilbage til Python For Kids