Python Orientado a Objetos: Guia Completo com Exemplos Práticos

As aulas em Python formam a base da programação orientada a objetos. Uma classe é definida com a palavra-chave class seguida do nome e dois pontos. Por exemplo, classe Carro: def iniciar(próprio, marca, modelo): self.brand = marca self.model = modelo. Os objetos são criados instanciando a classe, como my_car = Car(“Toyota”, “Corolla”). Os atributos de instância armazenam dados específicos para cada objeto, enquanto os atributos de classe são compartilhados entre todas as instâncias.

Os métodos adicionam comportamento às classes. Um método como def speedup(self): print(f”The {self.flag} speeds up”) permite que objetos executem ações. Os métodos de classe usam o decorador @classmethod e recebem cls como primeiro parâmetro, útil para criar fábricas de objetos. Os métodos estáticos, marcados com @staticmethod, não acessam a instância ou a classe e funcionam como funções utilitárias dentro do escopo da classe.

A herança permite que uma classe filha adquira atributos e métodos de uma classe pai. classe Veículo: def iniciar(self, rodas): self.wheels = rodas. classe Carro (Veículo): def iniciar(self, marca, modelo): super().iniciar(4) self.brand = marca. A função super() invoca o construtor da classe pai. A herança múltipla é obtida listando múltiplas classes pai, embora exija cuidado com a ordem de resolução do método usando MRO.

O polimorfismo permite que objetos de classes diferentes respondam à mesma mensagem de maneira diferente. Uma função como def show_info(vehicle): Vehicle.show() aceita qualquer objeto que implemente o método show. A substituição de métodos em classes filhas personaliza o comportamento sem alterar o código que usa a classe base. Decoradores como @property transformam métodos em atributos calculados, melhorando a interface das classes.

O encapsulamento protege os dados internos usando convenções de nomenclatura. Os atributos que começam com um sublinhado _attribute são considerados protegidos, enquanto __attribute permite a manipulação de nomes para evitar o acesso direto de fora da classe. Getters e setters, implementados com @property e @attribute.setter, controlam o acesso e validam valores antes de atribuí-los.

A abstração é alcançada com classes abstratas do módulo abc. de abc importar ABC, classe abstractmethod Figura (ABC): @abstractmethod def area(self): pass. As subclasses devem implementar os métodos abstratos ou falharão quando instanciados. Isso define contratos claros para hierarquias de classes.

Exemplos práticos incluem um sistema de gerenciamento de biblioteca. livro de aula: def iniciar(self, título, autor): self.title = título self.author = autor self.rendered = False. classe Usuário: def iniciar(self, nome): self.name = nome self.books = []. def lend(self, book): se não book.borrowed: book.borrowed = True self.books.append(book). A herança estende a funcionalidade com a classe PremiumUser(User): def lend(self, book): super().lend(book) print(“Extended Loan Access”).

Outro caso prático modela figuras geométricas. classe Retângulo: def iniciar(self, ancho, alto): self.ancho = ancho self.alto = alto def area(self): return self.ancho auto.alto. classe Círculo: def iniciar(self, rádio): self.radio = radio def area(self): return 3.1416 self.radio ** 2. Uma lista de formas permite calcular áreas totais usando polimorfismo sem saber o tipo exato de cada objeto.

A composição oferece alternativa à herança profunda. class Motor: def turn on(self): print(“Motor ligado”). classe Carro: def iniciar(auto): self.motor = Motor(). Isso promove flexibilidade, permitindo que os componentes sejam alterados em tempo de execução.

Padrões comuns em Python incluem o uso de classes de dados para reduzir código repetitivo. from dataclasses import dataclass @dataclass class Produto: nome: str preço: float. Métodos especiais como str, representação sim equação eles personalizam a representação e comparação de objetos.

O tratamento de exceções dentro das classes é implementado com blocos try-except em métodos específicos. Isso mantém a robustez quando os objetos interagem com recursos externos, como arquivos ou bancos de dados. O design orientado a objetos em Python equilibra simplicidade e poder graças à sua sintaxe clara e suporte nativo para todos os princípios fundamentais.

Deixe um comentário