Klasse-anatomie: de __init__-constructor

Introductie tot objectgeoriënteerd programmeren in Python

George Boorman

Curriculum Manager, DataCamp

Methodes en attributen

  • Methodes zijn functiedefinities binnen een class
  • self als eerste argument
  • Definieer attributen via toekenning
  • Verwijs in de class naar attributen met self.___
  • Veel methodes aanroepen wordt onhoudbaar!
class MyClass:
    # functiedefinitie in class
    # eerste argument is self
    def my_method1(self, other_args...):
        # doe hier iets

def my_method2(self, my_attr): # attribuut gemaakt via toekenning self.my_attr = my_attr ...
Introductie tot objectgeoriënteerd programmeren in Python

Constructor

  • Voeg data toe bij het maken van een object
  • Constructor __init__() wordt elke keer aangeroepen als er een object wordt gemaakt
    • Automatisch door de __methodname__-syntaxis
class Customer:
    def __init__(self, name):
        # Maak het attribuut .name en zet het op de parameter name
        self.name = name
        print("The __init__ method was called")
Introductie tot objectgeoriënteerd programmeren in Python

Constructor

# __init__ wordt impliciet aangeroepen 
cust = Customer("Lara de Silva")   
print(cust.name)
The __init__ method was called
Lara de Silva
Introductie tot objectgeoriënteerd programmeren in Python

Attributen in methodes

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...

obj = MyClass() # attr1 gemaakt obj.my_method1(val1) # attr2 gemaakt obj.my_method2(val2)

Attributen in de constructor

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Alle attributen worden gemaakt obj = MyClass(val1, val2)
  • Meestal gebruiken we de constructor
  • Attributen worden gemaakt bij het aanmaken van het object
  • Betere bruikbaarheid en onderhoudbaarheid
Introductie tot objectgeoriënteerd programmeren in Python

Argumenten toevoegen

class Customer:
    # Voeg balance-argument toe
    def __init__(self, name, balance): 

self.name = name # Voeg het attribuut balance toe self.balance = balance print("The __init__ method was called")
Introductie tot objectgeoriënteerd programmeren in Python

Parameters toevoegen

# __init__ wordt aangeroepen
cust = Customer("Lara de Silva", 1000)
print(cust.name)
print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Introductie tot objectgeoriënteerd programmeren in Python

Standaardargumenten

class Customer:
    # Stel een standaardwaarde in voor balance
    def __init__(self, name, balance=0):
        self.name = name
        # Wijs het nieuwe attribuut toe
        self.balance = balance
        print("The __init__ method was called")
Introductie tot objectgeoriënteerd programmeren in Python

Standaardargumenten

# Geef balance niet expliciet op
cust = Customer("Lara de Silva")

print(cust.name) # Het attribuut balance wordt toch gemaakt print(cust.balance)
The __init__ method was called
Lara de Silva
0
Introductie tot objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
Introductie tot objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
2. Naamgeving

CamelCase voor classes, lower_snake_case voor functies en attributen

Introductie tot objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
2. Naamgeving

CamelCase voor class, lower_snake_case voor functies en attributen

3. Laat self gewoon self zijn
class MyClass:
    # Dit werkt maar is niet aan te raden
    def my_method(george, attr):
        george.attr = attr
Introductie tot objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
2. Naamgeving

CamelCase voor class, lower_snake_case voor functies en attributen

3. self is self
4. Gebruik docstrings
class MyClass:
    """Deze class doet niets"""
    pass
Introductie tot objectgeoriënteerd programmeren in Python

Laten we oefenen!

Introductie tot objectgeoriënteerd programmeren in Python

Preparing Video For Download...