Programmering nivå 2

Kap 3.4 – Inkapsling och attribut

Skydda objektets data och styr åtkomst med metoder.

Mål med lektionen

När du har arbetat klart med denna lektion ska du:

  • Förstå vad inkapsling innebär och varför det är viktigt.
  • Känna till hur man markerar privata attribut i Python.
  • Kunna använda metoder, getters och setters, för att kontrollera åtkomst till data.

Så här lär du dig bäst

Tänk på inkapsling som att bygga en maskin där vissa delar är synliga och andra dolda. Börja med exemplen och testa att göra attribut privata. Skapa egna metoder som kontrollerar hur data läses och skrivs. Jämför med hur du använt attribut direkt tidigare.

Centrala begrepp

  • Inkapsling: att dölja objektets inre data och endast ge åtkomst via metoder.
  • Publikt attribut: ett fält som kan nås direkt utifrån.
  • Privat attribut: ett fält som är avsett att döljas, ofta skrivet med ett inledande understreck.
  • Getter och setter: metoder som används för att läsa eller ändra privata fält.

Inkapsling är en grundsten i OOP eftersom det skyddar objektets inre tillstånd och minskar risken för fel. Det gör också din kod tydligare och mer kontrollerad.

Använda inkapsling i Python

I Python är inget egentligen helt privat, men det är praxis att markera ett attribut som privat med ett inledande understreck: _.

class BankAccount:
    def __init__(self, owner, balance):
        self.owner = owner
        self._balance = balance  # privat attribut

    def deposit(self, amount):
        if amount > 0:
            self._balance += amount

    def withdraw(self, amount):
        if 0 < amount <= self._balance:
            self._balance -= amount

    def get_balance(self):
        return self._balance

Här används metoderna deposit(), withdraw() och get_balance() för att hantera saldot på ett kontrollerat sätt.

En setter är användbar när du vill kontrollera ett nytt värde innan det sparas i objektet. Du kan till exempel stoppa negativa tal, för höga betyg eller andra ogiltiga värden innan de ändrar objektets tillstånd.

account = BankAccount("Emma", 1000)

account.deposit(500)
account.withdraw(200)

print(account.get_balance())

Detta säkerställer att inga negativa uttag kan ske och att balansen skyddas.

Öva: skapa egna inkapslade attribut

  1. Skapa en klass Student med namnet publikt och betyg som ett privat attribut _grade.
  2. Skriv en metod set_grade() som bara godkänner betyg mellan 0 och 100.
  3. Skriv en metod get_grade() som returnerar betyget.
  4. Testa att skapa en elev och ändra betyg med metoden.

Sammanfattning

  • Inkapsling handlar om att skydda data och endast ge åtkomst via metoder.
  • Python använder understreck _ för att markera privata attribut.
  • Metoder som get_ och set_ används för att hantera privata fält.
  • Inkapsling förbättrar säkerhet, läsbarhet och kodens hållbarhet.

Tillbaka till Kapitel 3