Atribute de clasă vs. atribute de instanță

Introducere în Programarea Orientată pe Obiecte în Python

George Boorman

Curriculum Manager, DataCamp

Principii de bază ale POO

Încapsulare:

  • Gruparea datelor și metodelor

Moștenire:

  • Extinderea funcționalității codului existent

Polimorfism:

  • Crearea unei interfețe unificate
Introducere în Programarea Orientată pe Obiecte în Python

Atribute la nivel de instanță

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

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • Valorile name și salary sunt specifice fiecărui obiect
  • self atribuie valori unui obiect
Introducere în Programarea Orientată pe Obiecte în Python

Atribute la nivel de clasă

  • Date partajate între toate instanțele unei clase

 

  • Definiți atributele de clasă în corpul class

 

  • „Variabilă globală" în cadrul clasei
Introducere în Programarea Orientată pe Obiecte în Python

Implementarea atributelor de clasă

class Employee:
    # Define a class attribute
    # No self. syntax
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY este partajat între toate instanțele
  • Nu folosiți self pentru a defini atributul de clasă
  • Convenția este să se folosească litere majuscule
  • Folosiți ClassName.ATTR_NAME pentru a accesa valoarea atributului de clasă
Introducere în Programarea Orientată pe Obiecte în Python

Atribute la nivel de clasă

class Employee:
    # Define a class attribute
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Introducere în Programarea Orientată pe Obiecte în Python

Modificarea atributelor de clasă

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# Update MIN_SALARY of emp1 emp1.MIN_SALARY = 50000
# Print MIN_SALARY for both employees print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Introducere în Programarea Orientată pe Obiecte în Python

Modificarea atributelor de clasă

  • MIN_SALARY este definit în definiția clasei

 

  • Modificarea MIN_SALARY al unui obiect nu afectează valoarea din definiția clasei

 

  • Securitate — previne modificările aduse software-ului!
Introducere în Programarea Orientată pe Obiecte în Python

De ce să folosim atribute de clasă?

Constante globale legate de clasă

 

  • Valori minime și maxime pentru atribute
    • Previn datele invalide
  • Valori și constante comune, ex. host, port pentru o clasă Database
    • Evită repetiția la crearea obiectelor
Introducere în Programarea Orientată pe Obiecte în Python

Să exersăm!

Introducere în Programarea Orientată pe Obiecte în Python

Preparing Video For Download...