Klasse-anatomie: de __init__ constructor

Objectgeoriënteerd programmeren in Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Methoden en attributen

  • Methoden zijn functiedefinities binnen een klasse
  • self als eerste argument
  • Definieer attributen door toewijzing
  • Verwijs naar attributen in de klasse via self.___

   

class MyClass:
    # functiedefinitie in klasse
    # eerste argument is self
    def my_method1(self, other_args...):
        # doe hier dingen

    def my_method2(self, my_attr):        
        # attribuut aangemaakt door toewijzing
        self.my_attr = my_attr
        ...
Objectgeoriënteerd programmeren in Python

Constructor

  • Data toevoegen aan object bij creatie?
  • Constructor __init__() methode wordt elke keer aangeroepen als een object wordt gemaakt.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Maak het .name attribuut en stel het in op de name parameter
        print("De __init__ methode is aangeroepen")

cust = Customer("Lara de Silva") #<--- __init__ wordt impliciet aangeroepen print(cust.name)
De __init__ methode is aangeroepen
Lara de Silva
Objectgeoriënteerd programmeren in Python
class Customer:
       def __init__(self, name, balance):  # <-- balance parameter toegevoegd

self.name = name self.balance = balance # <-- balance attribuut toegevoegd print("De __init__ methode is aangeroepen")
cust = Customer("Lara de Silva", 1000) # <-- __init__ wordt aangeroepen print(cust.name) print(cust.balance)
De __init__ methode is aangeroepen
Lara de Silva
1000
Objectgeoriënteerd programmeren in Python
class Customer:
       def __init__(self, name, balance=0):  #<--standaardwaarde voor balance instellen

self.name = name self.balance = balance print("De __init__ methode is aangeroepen")
cust = Customer("Lara de Silva") # <-- balance niet expliciet specificeren
print(cust.name) print(cust.balance) # <-- attribuut wordt toch aangemaakt
De __init__ methode is aangeroepen
Lara de Silva
0
Objectgeoriënteerd programmeren in Python

Attributen in methoden

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

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- attr1 aangemaakt
obj.my_method2(val2) # <-- attr2 aangemaakt

Attributen in de constructor

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

# Alle attributen worden aangemaakt obj = MyClass(val1, val2)
  • makkelijker om alle attributen te kennen
  • attributen worden aangemaakt bij het maken van het object
  • bruikbaardere en onderhoudbare code
Objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
Objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
2. Naamgeving

CamelCase voor klassen, lower_snake_case voor functies en attributen

Objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
2. Naamgeving

CamelCase voor klassen, lower_snake_case voor functies en attributen

3. Houd self als self
class MyClass:
    # Dit werkt maar is niet aanbevolen
    def my_method(kitty, attr):
       kitty.attr = attr
Objectgeoriënteerd programmeren in Python

Best practices

1. Initialiseer attributen in __init__()
2. Naamgeving

CamelCase voor klassen, lower_snake_case voor functies en attributen

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

Laten we oefenen!

Objectgeoriënteerd programmeren in Python

Preparing Video For Download...