Skip to main content

Objetos

Classes e objetos

Podemos pensar uma classe como o "tipo de algo" e a instância como uma "subcategoria desse tipo". Por exemplo, país pode ser considerado um tipo de classe, e o Brasil seria uma instância dessa classe.

  • Para prepararmos um bolo, a classe seria a receita, e o objeto seria o bolo em si.
  • Na construção de uma casa, a planta da casa seria classe, e a casa em si, objeto
  • self

Declaração de uma classe


class Pais:
# atributos e métodos da classe

  • A palavra reservada class aponta a criação de uma classe em Python;
  • Após a palavra class, indicamos o nome desejado para a classe. Por convenção, o nome da classe deve ser iniciado com letra maiúscula. Caso o nome da classe seja constituído por mais de uma palavra, a letra inical de cada palavra deve ser maiúscula. Ex.: PaisesAfrica

Construtor da classe (instanciar objeto)

Quando criamos algo baseado nos parâmetros definidos em uma classe, dizemos que estamos instanciando um objeto.

Uma classe pode ser entendida como um molde ou um modelo para a criação de um novo tipo de objeto. Ela permite que novas instâncias deste objeto sejam produzidas. Cada objeto instanciado pode ter atributos e métodos.

Uma classe é composta por atributos e métodos.

  • Atributos são variáveis internas que definem as características do objeto criado. Os atributos devem ser referenciados no construtor da classe.
  • Métodos são funções internas que modificam o estado do objeto. Fornecem funcionalidades a determinado objeto

Para declarar um atributo em uma classe, é necessário utilizar o método especial __init__() e a palavra reservada self.

  • __init__() : método responsável por iniciar um objeto. Seu primeiro parâmetro é a própria instância do objeto, que por convenção é chamado de self

  • A título de curiosidade, o método __new__() é o responsável por construir a classe.

  • Para manipularmos o objeto criado e acessarmos seus atributos, utilizamos o operador .. Por exemplo, conta.titular

  • Objetos são acessados por referência. Quando criamos uma variável para associar a um objeto, essa variável não guarda o objeto, mas sim apenas uma maneira de acessá-lo. Não é correto dizer que a variável é o objeto, pois ela apenas faz uma referência ao objeto que será criado.

  • CONTINUANDO COM ATRIBUTOS - Agregação/Associação

  • Composição

    • Quando a existência de uma classe depende de uma outra classe
  • Modificadores de acesso (Encapsulamento)


class Pais: # definição do modelo

def __init__(self, nome, continente, capital, idioma): # função construtora da classe. Responsável por definir as características do tipo de dado (no nosso caso, `Pais`)
self.nome = nome
self.continente = continente
self.capital = capital
self.idioma = idioma

def localizacao(self): # criação de um método. Define determinado comportamento ou ação que um objeto pode realizar
if self.continente:
print(f'{self.nome} está localizado no {self.continente}')
else:
print('Continente não indicado')


def __str__(self):
return f'{self.nome} está localizado no continente {self.continente} e tem como capital {self.capital}. O idioma oficial é o {self.idioma}.'



def main(): #
paises = Pais('Africa do Sul', 'África', 'Joanesburgo', 'Inglês') # criação de um objeto do tipo país que possui os atributos nome, continente, capital e idioma
print(paises)
print(f'{paises.nome}, {paises.continente}, {paises.capital}, {paises.idioma}')
lugar = paises.localizacao()



if __name__ == "__main__":
main()

Encapsulamento

Encapsulamento diz respeito à proteção do acesso de algumas informações presentes em determinada classe

  • Em Python, o encapsulamento é realizado a partir de uma convenção a qual indica que métodos que começam com um underscores _ não devem (mas podem) ser acessados fora da classe
  • get: recupera dados
  • set: altera dados
EncapsulamentoDescrição
self.atributo - públicoPode ser acessada por qualquer lugar
self.__atributo - privadoAtributo/Método não deve ser acessado fora da classe
self._atributo - protegidoAtributo/Método é público mas não deve ser acessado
@propertyAtributo/Método está restrito, sendo assim, o acesso às variáveis funciona apenas dentro da classe

Tipos de métodos

  • Replit

  • @classmethod: Método de classe, utiliza por convenção o cls como parâmetro de funções

  • @staticmethod: Métodos estáticos, não recebem as convenções cls e self como parâmetros da função. Não interage com os atributos.

  • @abstractclassmethod: Métodos abstratos, servem para proteger os métodos herdados que precisam ser modificados

  • Métodos de instância não utilizam decoradores; recebem como parâmetro o self

Herança e polimorfismo

  • Herança: receber funcionalidades e características de outra classe

  • Polimorfismo: sobrescrever/modificar um método recebido como herança de outra classe

  • self utilizado sempre que queremos falar do exemplo

  • cls utilizado sempre que queremos falar com a classe

Herança múltipla e interfaces