Skip to content
Programmeren in Python, leer de nieuwste technieken
Programmeren in PythonProgrammeren in Python
  • Home
  • Blog
  • Documentatie
  • Cursussen
Programmeren in PythonProgrammeren in Python
  • Home
  • Blog
  • Documentatie
  • Cursussen

Introductie

4
  • 1.1 Wat is Python?
  • 1.2 Python installatie
  • 1.2.1 Python installeren voor MacOS
  • 1.3 PyCharm Installatie

Basisprogrammering

6
  • 2.1 Python Basis: Variabelen, Datatypes en Operatoren
  • 2.2 Python if else (en elif)
  • 2.3 Python list (Array, Lijsten)
  • 2.4 Python Lussen: for loop, while loop, break, continue
  • 2.5 Python Functies: Definities, Parameters en Terugkeerwaarden
  • 2.6 Foutafhandeling: try, except, else, finally

Datatypes

13
  • 3.1 Introductie tot Geavanceerde Datatypes
  • 3.2 Python Tuple
  • 3.3 Python Set
  • 3.4 Python Dictionary
  • 3.5 Werken met Strings en String-methoden
  • 3.6 Collections Module: Krachtige Tools in Python
  • 3.7 Iterators en Generators
  • 3.8 List Comprehensions
  • 3.9 Geavanceerde Sortering
  • 3.10 Werken met Multi-dimensionale Data
  • 3.11 Typing en Datatypes
  • 3.12 Itertools voor Geavanceerde Iteraties
  • 3.13 Data Conversies

Modules

8
  • 4.1 Wat zijn Modules en Waarom zijn ze Belangrijk?
  • 4.2 Werken met Ingebouwde Modules
  • 4.3 Installeren en Gebruiken van Externe Pakketten
  • 4.4 Eigen Modules Maken
  • 4.5 Introductie tot Pakketten
  • 4.6 Importeren en Namespaces Begrijpen
  • 4.7 Geavanceerd: Relatief Importeren
  • 4.8 Organiseren van Grotere Projecten

Data Analyse

3
  • 5.1 Python Dataframe en Data Opschonen met Pandas
  • 5.2 Python Pandas Basisstatistieken en Data-analyse
  • 5.3 Python Numpy (NpArray): De Kracht van Numerieke Berekeningen

Webontwikkeling

5
  • 7.1 Inleiding tot Webontwikkeling
  • 7.2 HTTP-Verzoeken met requests: Communiceren met het Web
  • 7.3 Webscraping met BeautifulSoup: Data van het Web Halen als er geen APIs zijn
  • 7.4 Python Flask, een webserver & API tutorial
  • 7.5 WSGI & WebOb

Deploy

1
  • Deploy met Supervisor op Ubuntu

Object Georiënteerd Programmeren

8
  • Wat is Objectgeoriënteerd Programmeren (OOP) in Python?
  • Python class & object maken
  • self en __init__ uitgelegd (met voorbeelden)
  • Attributen afschermen: @property (getters/setters)
  • Overerving in Python + super() (en wanneer je het beter níet doet)
  • Dunder methods: __str__, __repr__, vergelijken (en waarom dit je OOP-code “Pythonic” maakt)
  • @dataclass: snelle nette classes (minder boilerplate, meer duidelijkheid)
  • OOP in de praktijk: design & structuur
View Categories
  • Home
  • Documentatie
  • Object Georiënteerd Programmeren
  • Python class & object maken

Python class & object maken

3 minuten leestijd

Na dit hoofdstuk kun je:

  • een class schrijven die een “ding” modelleert,
  • er objecten (instances) van maken,
  • attributen en methodes gebruiken,
  • en je kent de meest voorkomende beginnersfouten.

Wat is een class (nog even heel kort)? #

Een class is een blauwdruk.
Een object/instance is een “echte” versie van die blauwdruk.

Als je “User” als class hebt, dan zijn “Alice” en “Bob” objecten van die class.

Stap 1: Je eerste class (de kleinste werkende versie) #
class User:
    pass
Python

Dit is een geldige class, maar hij doet nog niets.

Een object maken (instantiëren):

u = User()
print(u)  # iets als: <__main__.User object at ...>
Python

Stap 2: Attributen toevoegen (state) #

Je kunt dynamisch attributen toevoegen, maar dat is meestal niet ideaal:

u = User()
u.name = "Alice"
print(u.name)
Python

Dit werkt, maar het probleem is: niets dwingt af dat elk User-object een name heeft. Daarom gebruiken we bijna altijd __init__.

Stap 3: __init__ gebruiken (netjes initialiseren) #

class User:
    def __init__(self, name):
        self.name = name

alice = User("Alice")
bob = User("Bob")

print(alice.name)  # Alice
print(bob.name)    # Bob
Python

Wat gebeurt hier:

  • User("Alice") maakt een nieuw object.
  • Python roept automatisch __init__ aan.
  • self is het object zelf (bijv. alice).
  • self.name = name slaat state op in het object.

Stap 4 — Methodes toevoegen (gedrag) #

class User:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hi, ik ben {self.name}"

alice = User("Alice")
print(alice.greet())  # Hi, ik ben Alice
Python

Belangrijk:

  • Je roept een methode aan met alice.greet()
  • Python geeft automatisch self mee.

Voorbeeld dat “echt” aanvoelt: BankAccount

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        if amount <= 0:
            raise ValueError("Amount must be positive")
        self.balance += amount

    def withdraw(self, amount):
        if amount <= 0:
            raise ValueError("Amount must be positive")
        if amount > self.balance:
            raise ValueError("Insufficient funds")
        self.balance -= amount

acc = BankAccount("Alice", 100)
acc.deposit(50)
acc.withdraw(30)
print(acc.balance)  # 120
Python

Hier zie je:

  • state (owner, balance)
  • gedrag (deposit, withdraw)
  • regels/validatie zitten in het object (encapsulation begint al)

Veelgemaakte fouten (en hoe je ze herkent) #

1. self vergeten #

Fout:

class User:
    def __init__(name):
        self.name = name
Python

→ TypeError of rare errors, want Python verwacht self als eerste parameter.

Goed:

def __init__(self, name):
    self.name = name
Python

2. self.name = name vergeten #

Fout:

class User:
    def __init__(self, name):
        name = name  # doet niks nuttigs
Python

→ Later: AttributeError: 'User' object has no attribute 'name', want deze is dus niet goed initialiseert want self.name is niet benut enkel de parameter die je naar zichzelf veranderd (oftewel niks gebeurd).

3. Class variabele vs instance variabele door elkaar halen #

Dit is een klassieker:

class Team:
    members = []  # PAS OP: gedeeld door alle instances!

t1 = Team()
t2 = Team()
t1.members.append("Alice")
print(t2.members)  # ['Alice'] 😬
Python

Goed (lijst per object):

class Team:
    def __init__(self):
        self.members = []

t1 = Team()
t2 = Team()
t1.members.append("Alice")
print(t2.members)  # []
Python

Je ziet dus dat weer de referentie naar self het uiteindelijke object ook daadwerkelijk zelfstandig laat opereren. Terwijl zonder deze referentie te gebruiken het gedeeld wordt over alle instanties en je dus (vaak) ongewenste functionaliteit krijgt.

Handige extra: objecten “mooi” printen #

Zonder extra’s print een object niet zo informatief. Voeg __repr__ toe:

class User:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f"User(name={self.name!r})"

print(User("Alice"))  # User(name='Alice')
Python

Je kan dus nu succesvol een object aanmaken en weet het verschil in de context van de variabelen door het gebruik van self. Lees in het volgende hoofdstuk wat het onderscheid is tussen self en __init__.

Updated on januari 4, 2026

What are your Feelings

Wat is Objectgeoriënteerd Programmeren (OOP) in Python?self en __init__ uitgelegd (met voorbeelden)
Inhoudsopgave
  • Wat is een class (nog even heel kort)?
    • Stap 1: Je eerste class (de kleinste werkende versie)
  • Stap 2: Attributen toevoegen (state)
  • Stap 3: __init__ gebruiken (netjes initialiseren)
  • Stap 4 — Methodes toevoegen (gedrag)
  • Veelgemaakte fouten (en hoe je ze herkent)
    • 1. self vergeten
    • 2. self.name = name vergeten
    • 3. Class variabele vs instance variabele door elkaar halen
  • Handige extra: objecten “mooi” printen
Programmeren in Python

Leer python op je eigen tempo met mooie interactieve hedendaagse voorbeelden.

© Copyright 2026 Programmeren in Python.
Sign inSign up

Sign in

Don’t have an account? Sign up
Lost your password?

Sign up

Already have an account? Sign in