Kapselointi
Tutustukaa olio-ohjelmoinnin edistyneisiin käsitteisiin.
Kapselointi on ilmainen Python For Kids-oppitunti CoddyKitissä. Tämä on oppitunti 4/5. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python For Kids-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python For Kids-kurssilla on yhteensä 5 oppituntia.
Kapselointi
Tervetuloa takaisin olio-ohjelmointia (OOP) käsittelevään oppituntiin! Tänään opimme Pythonin kapseloinnista. Se on keskeinen käsite, joka auttaa suojaamaan luokkien sisäisiä tietoja ja metodeja.

Mitä kapselointi on
Kapselointi tarkoittaa tietojen (attribuuttien) ja niihin liittyvien toimintojen (funktioiden) kokoamista yhteen yksikköön, jota kutsutaan luokaksi. Se myös rajoittaa suoraa pääsyä joihinkin olion osiin, jolloin olion sisäinen esitysmuoto piilotetaan ulkopuolisilta.
- Tietojen piilottaminen: Olion sisäisen tilan suojaaminen tahattomalta häirinnältä.
- Pääsynhallinta: Sen määrittäminen, miten tietoihin ja metodeihin voidaan päästä käsiksi tai miten niitä voidaan muokata.
Kapselointi varmistaa, että oliot hallitsevat omia tietojaan ja tuovat esiin vain tarpeelliset osat.
Pääsymääreet
Pythonissa kapselointi toteutetaan pääsymääreillä, joilla hallitaan luokan jäsenten (attribuuttien ja metodien) näkyvyyttä. Pääsymääreitä on kolme:
- Julkinen: Käytettävissä mistä tahansa.
- Suojattu: Käytettävissä luokan ja sen aliluokkien sisällä.
- Yksityinen: Käytettävissä vain luokan sisällä.
Katsotaan, miten näitä pääsymääreitä käytetään Pythonissa.
Julkiset attribuutit ja metodit
Julkisiin jäseniin pääsee käsiksi luokan ulkopuolelta. Oletusarvoisesti kaikki attribuutit ja metodit ovat julkisia, ellei toisin määritetä.
Esimerkki:
# 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!
Suojatut attribuutit ja metodit
Suojatut jäsenet ilmaistaan yhdellä alaviivalla (_) alkuna. Niihin pääsee käsiksi luokan ja sen aliluokkien sisällä, mutta niitä ei pitäisi käyttää suoraan luokan ulkopuolelta.
Esimerkki:
# 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
Yksityiset attribuutit ja metodit
Yksityiset jäsenet ilmaistaan kahdella alaviivalla (__) alkuna. Niihin pääsee käsiksi vain luokan sisällä, eikä niitä voi käyttää suoraan luokan ulkopuolelta.
Esimerkki:
# 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
Miksi kapselointia käytetään
Kapseloinnista on useita hyötyjä:
- Hallinta: Tietojen käytön ja muokkaamisen hallinta.
- Suojaus: Olion sisäisen tilan suojaaminen tahattomilta muutoksilta.
- Ylläpidettävyys: Koodin ylläpito on helpompaa ja virheiden riski pienempi.
Kapselointi auttaa rakentamaan vakaita ja turvallisia sovelluksia.
Kapselointiesimerkki: Car-luokka
Luodaan Car-luokka, joka käyttää kapselointia määritteidensä ja metodiensa suojaamiseen.
Koodi:
# 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
Hienoa työtä!
Olette oppineet käyttämään kapselointia Pythonissa luokkien sisältämien tietojen ja metodien suojaamiseen. Kapseloinnin avulla voitte hallita olion tietojen käyttöä, mikä tekee ohjelmista turvallisempia ja helpommin ylläpidettäviä. Jatkakaa harjoittelua suunnittelemalla luokkia, joissa on tarkoituksenmukaiset käyttöoikeusmääritteet, ja kehittäkää ohjelmointitaitojanne!

Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 22
- Oppitunnit
- 94
Usein kysytyt kysymykset
Onko oppitunti ”Kapselointi” ilmainen?
Kyllä – oppitunnin ”Kapselointi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python For Kids-kurssin, päivitä CoddyKit PROhon. Python For Kids-kurssilla on yhteensä 5 oppituntia.
Mitä opin oppitunnilla ”Kapselointi”?
Tutustukaa olio-ohjelmoinnin edistyneisiin käsitteisiin. Harjoittelet Python For Kids-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Python For Kids-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Python For Kids-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/5.
Kuinka kauan ”Kapselointi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Python For Kids-oppitunnilla?
Kyllä. Jokainen Python For Kids-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.