Basis van objectgeoriënteerd programmeren

Gevorderde objectgeoriënteerde programmering in Python

Jake Roach

Data Engineer

Een klasse definiëren

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.height = 0

# Dit roept __init__ aan
john = Person("John Casey", 38)
  • Definieer een klasse met het sleutelwoord class
  • __init__ is een constructor en wordt aangeroepen bij het maken van een nieuw klasseobject
  • self verwijst naar de huidige instantie van een klasse
Gevorderde objectgeoriënteerde programmering in Python

Instantie-attributen

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age
# Maak een instantie van Person
sarah = Person("Sarah Walker", 31)
sarah.age  # Haal het instantie-attribuut age op
  • Geassocieerd met een object van een klasse
  • Kun je instellen en opvragen met de syntax self.<attribute-name>
  • Toegankelijk via <object-name>.<attribute-name>
Gevorderde objectgeoriënteerde programmering in Python

Klasse-attributen

  • Gekoppeld aan de klasse zelf
  • Kun je zonder object van de klasse opvragen
  • Sla data op die voor alle klasseobjecten gelijk is
class Person:
  residence = "Planet Earth"
  ...
# Toegang zonder instantie
print(Person.residence)
Planet Earth
Gevorderde objectgeoriënteerde programmering in Python

Instantie-methodes

class Person:
  ...
  def introduce(self):
      print(f"Hello, my name is {self.name}")
chuck = Person("Chuck", 32)
chuck.introduce()  # Aangeroepen op een Person-object

$$

  • Vereisen een object van de klasse om aan te roepen
  • Nemen het sleutelwoord self als eerste parameter
Gevorderde objectgeoriënteerde programmering in Python

Klassemethoden

class Person:
  @classmethod
  def wake_up(cls):
      print("Time to start your day!")
# Calling a class method
Person.wake_up()

$$

  • Gedecoreerd met @classmethod
  • Vereist geen klasseobject om aan te roepen
Gevorderde objectgeoriënteerde programmering in Python

Overerving

Overerving maakt hergebruik van code tussen klassen mogelijk

  • De kindklasse (Employee) erft alle functionaliteit van de ouderklasse (Person)
  • "is-a"-relatie
  • Kan extra functionaliteit toevoegen
    • Attributen
    • Methodes
class Person:
  def __init__(self, name, age):
    self.name
    self.age = age

  def introduce(self):
      print(f"Hello, my name is {self.name}")
class Employee(Person):
  def __init__(self, name, age, title):
    Person.__init__(self, name, age)
    self.title = title

  def change_position(self, new_title):
      self.title = new_title
Gevorderde objectgeoriënteerde programmering in Python

Overerving

lester = Employee("Lester", 26, "Technician")
lester.introduce()  # Geërfd van Person
print(lester.title)
Hello, my name is Lester
Technician
lester.change_position("Cashier")
print(lester.title)
Cashier
Gevorderde objectgeoriënteerde programmering in Python

super()

class Employee(Person):
  def __init__(self, name, age, title):
    # Gebruikt de naam van de ouderklasse
    Person.__init__(self, name, age)

    self.title = title
  ...
  • Klassennaam, __init__()

super() gebruiken

class Employee(Person):
  def __init__(self, name, age, title):
    # super() in plaats van klassennaam
    super().__init__(name, age)

    self.title = title
  ...
  • super(), __init__()
  • self hoef je niet door te geven
Gevorderde objectgeoriënteerde programmering in Python

Override

Kind past een geërfde methode op een nieuwe manier aan

class Employee(Person):
  ...
  def introduce(self):
      print(f"""My name is {self.name},
        I am a {self.title}""")
lester = Employee("Lester", 26, "Technician")
lester.introduce()
My name is Lester, I am a Technician
Gevorderde objectgeoriënteerde programmering in Python

Overloaden

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

  def __eq__(self, other):
      return self.name == other.name

$$

  • Pas het gedrag van Python-operatoren voor een klasse aan
  • __eq__() overlaadt ==

$$

$$

$$

$$

# Vergelijk twee Person-objecten
chuck = Person("Charles Carmichael")
charles = Person("Charles Carmichael")
print(chuck == charles)
True
Gevorderde objectgeoriënteerde programmering in Python

Laten we oefenen!

Gevorderde objectgeoriënteerde programmering in Python

Preparing Video For Download...