Atributos de classe vs. instância

Introdução à programação orientada a objetos em Python

George Boorman

Curriculum Manager, DataCamp

Princípios básicos de POO

Encapsulamento:

  • Agrupar dados e métodos

Herança:

  • Estender funcionalidades existentes

Polimorfismo:

  • Criar uma interface unificada
Introdução à programação orientada a objetos em Python

Atributos em nível de instância

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

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • name e salary são específicos de cada objeto
  • self atribui ao objeto
Introdução à programação orientada a objetos em Python

Atributos em nível de classe

  • Dados compartilhados por todas as instâncias da classe

 

  • Defina atributos de classe no corpo de class

 

  • "Variável global" dentro da classe
Introdução à programação orientada a objetos em Python

Implementando atributos de classe

class Employee:
    # Defina um atributo de classe
    # Sem sintaxe self.
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Use o nome da classe # para acessar o atributo de classe if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY é compartilhado por todas as instâncias
  • Não use self para definir atributo de classe
  • Convenção: usar letras maiúsculas
  • Use ClassName.ATTR_NAME para acessar o valor do atributo de classe
Introdução à programação orientada a objetos em Python

Atributos em nível de classe

class Employee:
    # Defina um atributo de classe
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Use o nome da classe # para acessar o atributo de classe 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
Introdução à programação orientada a objetos em Python

Modificando atributos de classe

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

# Atualizar MIN_SALARY de emp1 emp1.MIN_SALARY = 50000
# Imprimir MIN_SALARY para ambos print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Introdução à programação orientada a objetos em Python

Modificando atributos de classe

  • MIN_SALARY é criado na definição da classe

 

  • Atualizar MIN_SALARY num objeto não afeta o valor na classe

 

  • Segurança: evita mudanças no software!
Introdução à programação orientada a objetos em Python

Por que usar atributos de classe?

Constantes globais da classe

 

  • Valores mínimo e máximo para atributos
    • Evitam dados inválidos
  • Valores e constantes comuns, ex.: host, port em uma classe Database
    • Evitam repetição ao criar objetos
Introdução à programação orientada a objetos em Python

Vamos praticar!

Introdução à programação orientada a objetos em Python

Preparing Video For Download...