Direct naar de hoofdinhoud
Module 7 · Les 1 van 425/36 in de cursus~14 min
Modulelessen (1/4)

Klassen en instanties

Een klasse is een blauwdruk voor het maken van objecten die gegevens (attributen) bevatten en gedrag (methoden). Een instantie is een concreet object waaruit is gemaakt de klas.

Minimale syntaxis

Python
class Cane:
    def __init__(self, nome, eta):
        self.nome = nome
        self.eta = eta

    def abbaia(self):
        return f"{self.nome} dice WOOF!"

# creazione di istanze
fido = Cane("Fido", 3)
luna = Cane("Luna", 5)

fido.nome       # 'Fido'
fido.abbaia()   # 'Fido dice WOOF!'

__init__: de "constructor"

De methode __init__ wordt automatisch aangeroepen wanneer u een exemplaar (Cane("Fido", 3)). Het wordt gebruikt om de attributen te initialiseren.

Technisch gezien is het geen constructor (het object is al gemaakt door __new__), maar het is de plaats waar u de beginstatus instelt.

self: de eerste parameter

self is de verwijzing naar de instantie waarop de methode is aangeroepen. Het is een conventie (geen trefwoord) en is altijd de eerste parameter van de instantie methoden.

Python
fido.abbaia()
# equivalente a Cane.abbaia(fido)
# Python passa fido come self automaticamente

Instantie versus klassekenmerken

Python
class Cane:
    specie = "Canis familiaris"   # attributo di CLASSE (condiviso)

    def __init__(self, nome):
        self.nome = nome           # attributo di ISTANZA (per ognuno)

fido = Cane("Fido")
luna = Cane("Luna")

fido.nome       # 'Fido'        (istanza)
luna.nome       # 'Luna'        (istanza)
fido.specie     # 'Canis familiaris'  (cercato sulla classe)
Cane.specie     # 'Canis familiaris'

Meerdere methoden en status

Python
class Contatore:
    def __init__(self, inizio=0):
        self.valore = inizio

    def incrementa(self, di=1):
        self.valore += di

    def reset(self):
        self.valore = 0

c = Contatore()
c.incrementa()
c.incrementa(di=5)
c.valore       # 6
c.reset()
c.valore       # 0

Jouw beurt

Oefening#python.m7.l1.e1
Pogingen: 0Laden…

Definieer een klasse `Point` met __init__(self, x, y) waarin de attributen zijn opgeslagen. Voeg een methode `distance_from_origin` toe die de vierkantswortel van x^2 + y^2 retourneert. Creëer `p = Point(3, 4)` en evalueer `p.distance_from_origin()`.

Editor laden…
Toon hint

wiskunde.sqrt(zelf.x ** 2 + zelf.y ** 2)

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m7.l1.e2
Pogingen: 0Laden…

Definieer `BankAccount` met __init__(self, balance=0) en methoden `deposit(amount)`, `withdraw(amount)` die self.balance wijzigen. Creëer `a = BankAccount(100)`, stort 50, neem 30 op. Evalueer `a.saldo`.

Editor laden…
Toon hint

self.balance += bedrag in deposito.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m7.l1.e3
Pogingen: 0Laden…

Define a class `Rectangle` with a constructor `__init__(self, width, height)` to set width and height, and a method `area(self)` that returns the product of width and height. Instantiate a rectangle with width `4` and height `5` storing it in `rect`, and evaluate `rect.area()`.

Editor laden…
Toon hint

Vergeet niet om self te gebruiken om toegang te krijgen tot attributen binnen area(self).

Oplossing beschikbaar na 3 pogingen