Atributy třídy vs. atributy instance

Úvod do objektově orientovaného programování v Pythonu

George Boorman

Curriculum Manager, DataCamp

Základní principy OOP

Zapouzdření:

  • Sdružení dat a metod

Dědičnost:

  • Rozšíření funkcionality existujícího kódu

Polymorfismus:

  • Vytvoření jednotného rozhraní
Úvod do objektově orientovaného programování v Pythonu

Atributy na úrovni instance

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

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • Hodnoty name a salary jsou specifické pro každý objekt
  • self přiřazuje hodnotu objektu
Úvod do objektově orientovaného programování v Pythonu

Atributy na úrovni třídy

  • Data sdílená všemi instancemi třídy

 

  • Atributy třídy se definují v těle class

 

  • „Globální proměnná" v rámci třídy
Úvod do objektově orientovaného programování v Pythonu

Implementace atributů na úrovni třídy

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 je sdílen všemi instancemi
  • Při definici atributu třídy se nepoužívá self
  • Konvencí je používat velká písmena
  • Pro přístup k atributu třídy použijte ClassName.ATTR_NAME
Úvod do objektově orientovaného programování v Pythonu

Atributy na úrovni třídy

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
Úvod do objektově orientovaného programování v Pythonu

Úprava atributů na úrovni třídy

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
Úvod do objektově orientovaného programování v Pythonu

Úprava atributů na úrovni třídy

  • MIN_SALARY je definován v těle třídy

 

  • Změna MIN_SALARY u objektu neovlivní hodnotu v definici třídy

 

  • Zabezpečení – zabraňuje nechtěným změnám!
Úvod do objektově orientovaného programování v Pythonu

Proč používat atributy třídy?

Globální konstanty třídy

 

  • Minimální a maximální hodnoty atributů
    • Zabraňují neplatným datům
  • Běžně používané hodnoty a konstanty, např. host, port pro třídu Database
    • Zabraňují opakování při vytváření objektů
Úvod do objektově orientovaného programování v Pythonu

Pojďme si procvičit!

Úvod do objektově orientovaného programování v Pythonu

Preparing Video For Download...