Klassmetoder

Introduktion till objektorienterad programmering i Python

George Boorman

Curriculum Manager, DataCamp

Metoder

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

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


# Unika attributvärden emp_one = Employee("John", 40000)
emp_one.give_raise(5000) print(emp_one.salary)
45000









# Unika attributvärden emp_two = Employee("Jane", 60000)
emp_two.give_raise(5000) print(emp_two.salary)
65000
Introduktion till objektorienterad programmering i Python

Klassmetoder

  • Möjligt att definiera klassmetoder
  • Måste ha ett snävt omfång eftersom de inte kan använda objektnivådata
class MyClass:
    # Använd en dekoratör för att deklarera en klassmetod
    @classmethod

# cls-argumentet refererar till klassen def my_awesome_method(cls, args...): # Gör något här # Kan inte använda instansattribut
# Anropa klassen, inte objektet MyClass.my_awesome_method(args...)
  • Precis som self är cls en konvention, men vilket ord som helst fungerar
Introduktion till objektorienterad programmering i Python

Alternativa konstruktorer

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: # Läs den första raden name = f.readline().strip() # Läs den andra raden som ett heltal salary = int(f.readline().strip())
return cls(name, salary)
  • Möjliggör alternativa konstruktorer
  • Kan bara ha en __init__()

 

  • Använd klassmetoder för att skapa objekt
  • Använd return för att returnera ett objekt
  • cls(...) anropar __init__(...)
Introduktion till objektorienterad programmering i Python

Alternativa konstruktorer

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

Textfil med namnet John Smith och lönen 40000

# Skapa en anställd utan att anropa Employee()
emp = Employee.from_file("employee_data.txt")
print(emp.name)
John Smith
Introduktion till objektorienterad programmering i Python

När ska klassmetoder användas?

  • Alternativa konstruktorer

  • Metoder som inte kräver attribut på instansnivå

  • Begränsa till en enda instans (objekt) av en klass

    • Databasanslutningar
    • Konfigurationsinställningar
Introduktion till objektorienterad programmering i Python

Nu kör vi en övning!

Introduktion till objektorienterad programmering i Python

Preparing Video For Download...