Revisão de Classes e Objetos

--- id: 67f39d848979082814c07d9c title: Revisão de Classes e Objetos challengeType: 31 dashedName: review-classes-and-objects --- # --description--

Classes e Objetos em Python

  • Definição de Classe: Uma classe é um modelo para criar objetos. Ela define o comportamento que um objeto terá através de seus atributos e métodos. Aqui está um exemplo básico de uma definição de classe em Python:
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f'{self.name.upper()} says woof woof!')
  • Criando Objetos: Objetos são instâncias de uma classe. Eles são criados chamando a classe com os argumentos necessários.
dog1 = Dog('Jack', 3)
dog2 = Dog('Thatcher', 5)

dog1.bark()  # JACK says woof woof!
dog2.bark()  # THATCHER says woof woof!
  • Chamando Métodos em Objetos: Você pode chamar métodos em objetos para executar ações ou recuperar informações.
object_name1.method_name()
object_name2.method_name()
  • Diferença Entre Classe e Objeto: Uma classe é um modelo reutilizável, enquanto um objeto é uma instância específica dessa classe com dados reais.

Atributos

  • Atributos de Instância: Definidos em __init__() usando self e únicos para cada objeto.
  • Atributos da Classe: Definidos diretamente dentro da classe e compartilhados por todas as instâncias.
class Dog:
    species = 'French Bulldog'  # Class attribute

    def __init__(self, name):
        self.name = name  # Instance attribute

print(Dog.species) # French Bulldog

jack = Dog('Jack')
print(jack.name)     # Jack
print(jack.species)  # French Bulldog

Métodos

  • Métodos: Funções definidas dentro de uma classe que operam nos atributos do objeto.
class Car:
    def __init__(self, color, model):
        self.color = color
        self.model = model

    def describe(self):
        return f'This car is a {self.color} {self.model}'

my_car_1 = Car('red', 'Tesla Model S')
print(my_car_1.describe())  # This car is a red Tesla Model S
  • Acessando Métodos: Chame métodos em objetos usando a notação de ponto. Aqui está um exemplo de chamada do método describe em dois objetos de carro diferentes:
class Car:
    def __init__(self, color, model):
        self.color = color  
        self.model = model  

    def describe(self):
        return f'This car is a {self.color} {self.model}'

my_car_1 = Car('red', 'Tesla Model S')
my_car_2 = Car('green', 'Lamborghini Revuelto')

print(my_car_1.describe()) # Calling method using the dot notation

print(my_car_2.describe()) # Calling method using the dot notation

Métodos Dunder (Mágicos)

  • Definição: Métodos especiais que começam e terminam com um duplo underscore (por exemplo, __init__, __len__, __str__, __eq__). Python os usa internamente para operações internas.
class Book:
    def __init__(self, title, pages):
        self.title = title
        self.pages = pages

    def __len__(self):
        return self.pages

    def __str__(self):
        return f"'{self.title}' has {self.pages} pages"

    def __eq__(self, other):
        return self.pages == other.pages

book1 = Book('Built Wealth Like a Boss', 420)
print(len(book1))        # 420
print(str(book1))        # 'Built Wealth Like a Boss' has 420 pages
  • Chamando métodos dunder indiretamente: Você não precisa chamar métodos dunder diretamente. Em vez disso, o Python os chama automaticamente quando certas ações acontecem. Essas operações incluem:
  • operações aritméticas como adição, subtração, multiplicação, divisão e outras. Além disso, __add__() é chamado, __sub__() para subtração, __mul__() para multiplicação e __truediv__() para divisão.
  • operações de string como concatenação, repetição, formatação e conversão para texto. __add__() é chamado para concatenação, __mul__() para repetição, __format__() para formatação, __str__() e __repr__() para conversão para texto e assim por diante.
  • operações de comparação como igualdade, menor que, maior que e outras. __eq__() é chamado para verificações de igualdade, __lt__() para menor que, __gt__() para maior que e assim por diante.
  • operações de iteração como tornar um objeto iterável e avançar pelos itens. __iter__() é chamado para retornar um iterador e __next__() para buscar o próximo item.

Exemplo do Mundo Real: Carrinho de Compras

  • Classe Cart com Métodos Dunder: Permite adicionar, remover, iterar e verificar conteúdos com comportamento embutido.
class Cart:
    def __init__(self):
        self.items = []

    def add(self, item):
        self.items.append(item)

    def remove(self, item):
        if item in self.items:
            self.items.remove(item)
        else:
            print(f'{item} is not in cart')

    def list_items(self):
        return self.items

    def __len__(self):
        return len(self.items)

    def __getitem__(self, index):
        return self.items[index]

    def __contains__(self, item):
        return item in self.items

    def __iter__(self):
        return iter(self.items)

cart = Cart()
cart.add('Laptop')
print(len(cart))        # 1
print('Laptop' in cart) # True
# --assignment-- Revise os tópicos e conceitos de Classes e Objetos.