Criar uma classe em Python é simples Primeiro definimos o nome da classe E podemos criar o construtor Devemos seguir a identação exigida pela linguagem Podemos definir métodos adicionais
#PraCegoVer - Transcrição dos Slides Criar uma classe em Python é bastante simples

Para definir o nome da classe usamos a palavra reservada class - class Pessoa: - Após o nome da classe devemos adicionar dois pontos

Para criar um método usamos a palavra reservada def. O construtor é um método reservado chamado _init>. O parâmetro self é obrigatório e os demais são definidor por nós. - def _init_(self, nome, idade):

Aqui está o corpo do método, sempre identado como manda a sintaxe da linguagem - self.nome = nome
self.idade = idade

A partir daí podemos definir quantos métodos precisarmos.

Primeira classe em Python

No Python a criação de classes é bem simples e nos permite definir quais atributos e métodos uma classe irá possuir. Na Figura 1 podemos visualizar a representação de uma classe com o nome Pessoa e quais atributos esta possui:

Diagrama de classe Pessoa
Figura 1. Diagrama de classe Pessoa

Abaixo podemos ver como a classe citada acima seria implementada utilizando a linguagem Python:


class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade
    
    def setNome(self, nome):
        self.nome = nome
    
    def setIdade(self, idade):
        self.idade = idade
    
    def getNome(self):
        return self.nome
        
    def getIdade(self):
        return self.idade

Linha 1: A criação de uma classe começa pelo uso da palavra reservada class, seguida do nome da classe e dois pontos;

Linha 2: Aqui temos a definição do construtor da classe, que é um método especial chamado __init__. Como todo método em Python, sua declaração começa com def e entre parênteses estão os parâmetros, incluindo o parâmetro obrigatório self, que está presente em todos os métodos;

Linhas 3 e 4: O corpo do método deve estar identado, como manda a sintaxe da linguagem. Aqui estamos apenas atribuindo os valores recebidos por parâmetro aos atributos da classe;

Linhas 6 a 16: Criamos os métodos get e set de todos os atributos da classe Pessoa que serão responsáveis, respectivamente, por retornar ou modificar os atributos desta classe.

Herança em Python

Python também suporta herança Devemos importar a classe pai Em seguida definir o nome da classe filha herando dela Podemos definir o construtor da classe filha E chamar o construtor da classe pai A classe filha pode ter seus próprios atributos E seus próprios métodos
#PraCegoVer - Transcrição dos Slides Também podemos implementar herança entre classes no Python: PessoaFisica e PessoaJuridica herdam de Pessoa
Primeiro precisamos importar a classe pai - from pessoa import Pessoa - pessoa é o nome do arquivo em que a classe pai foi criada (sem a extensão .py)
Pessoa é o nome da classe Pai.

Em seguida podemos definir a classe filha herdando da classe pai (entre parênteses) - class PessoaFisica(Pessoa): - onde PessoaFisica é o nome da classe filha e Pessoa é a classe pai

Podemos criar um novo construtor: def _init_(self, CPF, nome, idade):

E invocar o construtor da classe pai, aproveitando seu funcionando padrão - super()._init_(nome, idade)

A classe filha pode ter seus próprios atributos... - self.CPF = cpf

... e também seus próprios métodos:
def setCPF(self, cpf): self.CPF = cpf
def getCPF(self): return self.CPF

Na Programação Orientada a Objetos o conceito de herança é muito utilizado. Basicamente, dizemos que a herança ocorre quando uma classe (filha) herda características e métodos de uma outra classe (pai), mas não impede de que a classe filha possua seus próprios métodos e atributos. Na Figura 2 podemos ver, em nível de diagrama, como esta relação ocorre:

Diagrama de classes com PessoaFisica e PessoaJuridica herdando da classe Pessoa
Figura 2. Diagrama de classes com PessoaFisica e PessoaJuridica herdando da classe Pessoa

Abaixo podemos ver como esta relação ocorre em Python:


from pessoa import Pessoa

class PessoaFisica(Pessoa):
   def __init__(self, CPF, nome, idade):
       super().__init__(nome, idade)
       self.CPF = CPF
   
   def getCPF(self):
       return self.CPF
   
   def setCPF(self, CPF):
       self.CPF = CPF

Linha 1: Como vamos herdar da classe Pessoa e ela foi definida em outro arquivo (pessoa.py), precisamos importá-la. Para isso usamos a instrução import e indicamos o nome do arquivo, sem a extensão .py, seguido do nome da classe que queremos importar;

Linha 3: Para definir que uma classe herdará de uma outra classe, precisamos indicar o nome da classe pai entre parênteses após o nome da classe filha;

Linha 4: Criamos o construtor da classe filha e definimos quais atributos ela espera receber. Neste caso, o nome e idade estão definidos na classe pai, enquanto o cpf é próprio da classe filha;

Linha 5: Utilizando o método super, invocamos o construtor da classe pai. Com isso aproveitamos todo a lógica definida nesse método, que no caso faz a atribuição dos valores de nome e idade aos atributos da classe. Com isso garantimos que ao ser criada, a classe filha efetuará o mesmo processamento que a classe pai e mais alguns passos adicionais.

Dessa mesma forma podemos criar a classe PessoaJuridica:


from pessoa import Pessoa
 
class PessoaJuridica(Pessoa): 
    def __init__(self, CNPJ, nome, idade):
        super().__init__(nome, idade)
        self.CNPJ = CNPJ
    
    def getCNPJ(self):
        return self.CNPJ
    
    def setCNPJ(self, CNPJ):
        self.CNPJ = CNPJ

Observe que o nome das classes começa com letra maiúscula (inclusive quando há mais de uma palavra, como em PessoaFisica). Essa é uma convenção de escrita de código na linguagem, mas não uma obrigatoriedade da sintaxe

Sugestão de conteúdo