Classmethods

Introductie tot objectgeoriënteerd programmeren in Python

George Boorman

Curriculum Manager, DataCamp

Methoden

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def give_raise(self, amount):
        self.salary += amount


# Unieke attribuutwaarden emp_one = Employee("John", 40000)
emp_one.give_raise(5000) print(emp_one.salary)
45000









# Unieke attribuutwaarden emp_two = Employee("Jane", 60000)
emp_two.give_raise(5000) print(emp_two.salary)
65000
Introductie tot objectgeoriënteerd programmeren in Python

Classmethods

  • Je kunt classmethods definiëren
  • Houd de scope klein: ze gebruiken geen objectdata
class MyClass:
    # Gebruik een decorator om een classmethod te declareren
    @classmethod

# cls verwijst naar de klasse def my_awesome_method(cls, args...): # Doe hier iets # Kan geen instantie-attributen gebruiken
# Roep de klasse aan, niet het object MyClass.my_awesome_method(args...)
  • Net als self is cls conventie; elk woord werkt
Introductie tot objectgeoriënteerd programmeren in Python

Alternatieve constructors

class Employee:
  def __init__(self, name, salary):
      self.name = name
      self.salary = salary

@classmethod def from_file(cls, filename): with open(filename, "r") as f: # Lees de eerste regel name = f.readline().strip() # Lees de tweede regel als integer salary = int(f.readline().strip())
return cls(name, salary)
  • Bieden alternatieve constructors
  • Er kan maar één __init__() zijn

 

  • Gebruik classmethods om objecten te maken
  • Gebruik return om een object terug te geven
  • cls(...) roept __init__(...) aan
Introductie tot objectgeoriënteerd programmeren in Python

Alternatieve constructors

class Employee:
  def __init__(self, name, salary):
      self.name = name
      self.salary = salary
  @classmethod
  def from_file(cls, filename):
      with open(filename, "r") as f:
          name = f.readline().strip()
          salary = int(f.readline().strip())
      return cls(name, salary)  

Employee.txt

Tekstbestand met de naam John Smith en salaris 40000

# Maak een employee zonder Employee() aan te roepen
emp = Employee.from_file("employee_data.txt")
print(emp.name)
John Smith
Introductie tot objectgeoriënteerd programmeren in Python

Wanneer gebruik je classmethods

  • Alternatieve constructors

  • Methoden die geen instantie-attributen nodig hebben

  • Beperken tot één instantie (object) van een klasse

    • Databaseverbindingen
    • Configuratie-instellingen
Introductie tot objectgeoriënteerd programmeren in Python

Laten we oefenen!

Introductie tot objectgeoriënteerd programmeren in Python

Preparing Video For Download...