Orientação a objetos em Python \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 21 Horas 

 20 Min 

 53 Seg 

   Tempo restante da oferta: 21 20 53 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Orientação a objetos em Python  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

# Orientação a objetos em Python

 Veja neste artigo os principais conceitos do paradigma orientação a objetos e como eles se aplicam no Python.

 [ Ana Paula de Andrade ](https://www.treinaweb.com.br/blog/autor/ana-paula-andrade) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/IDE-PYTHON.png)  

 O [paradigma de programação orientado à objetos](https://www.treinaweb.com.br/blog/os-pilares-da-orientacao-a-objetos/) é um dos principais paradigmas das linguagens de programação. Muito utilizado no mercado, entender como funciona e como implementar este paradigma é essencial para todo desenvolvedor de software.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/E-BOOK-GRATUITO-PYTHON.jpg) ](https://www.treinaweb.com.br/ebook/guia-python/)

No [Python](https://www.treinaweb.com.br/blog/o-que-e-python/ "Python"), o paradigma orientado à objetos funciona de forma similar às outras linguagens, porém com algumas mudanças em sua implementação, como veremos ao longo deste artigo.

## Declarando classes

No paradigma orientado à objetos, uma classe é a representação de algo do mundo real. No Python, o uso de classes é algo constante no desenvolvimento de programas.

Sendo assim, para declarar uma classe no Python é bem simples, como podemos ver abaixo:

```python
class Pessoa():
# Atributos e métodos da classe

```

Como vimos acima, para declarar uma classe no Python, utilizamos a palavra reservada `class` seguido do nome desta classe.

No Python, todas as classes devem, por boas práticas, possuir nomes que comecem com letra maiúscula e, caso sejam compostos, a primeira letra de cada palavra deve ser maiúscula, o que chamamos de formato `CamelCase`:

```python
class PessoaFisica():
    # Atributos e métodos da classe

```

## Criando construtor da classe

Uma classe é representada por atributos e métodos. Os atributos de uma classe representam as características que esta classe possui, já os métodos representam o comportamento da classe.

Para declarar um atributo em uma classe no Python é bem simples, basta definir o nome do atributo no método especial chamado `__init__`, este método define o construtor da classe, ou seja, é onde definimos como uma nova pessoa será criada em nosso programa.

Para definir os atributos de uma classe em seu construtor, basta passá-los como parâmetro, como podemos ver abaixo:

```python
class Pessoa:
    def __init__(self, nome, sexo, cpf):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf

```

Agora, estamos indicando que toda pessoa que for criada em nosso programa e que utilize como base a classe `Pessoa` deverá possuir um nome, sexo e cpf.

## Instanciando objetos

Como vimos anteriormente, as classes representam a estrutura de um elemento no mundo real, porém ela é apenas o modelo destes elementos.

Sempre que precisamos criar “algo” com base em uma classe, dizemos que estamos “instanciando objetos”. O ato de instanciar um objeto significa que estamos criando a representação de uma classe em nosso programa.

Para instanciar um objeto no Python com base em uma classe previamente declarada, basta indicar a classe que desejamos utilizar como base e, caso possua, informar os valores referentes aos seus atributos, como podemos ver abaixo:

```python
class Pessoa:
    def __init__(self, nome, sexo, cpf):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456")
    print(pessoa1.nome)

```

Ao executar a linha `pessoa1 = Pessoa("João", "M", "123456")`estamos criando um objeto do tipo pessoa com nome “João”, sexo “M” e cpf “123456”.

Com isso, agora possuímos uma forma de criar diversas pessoas utilizando a mesma base, a classe Pessoa.

Ao executar o código acima e imprimir o nome dessa pessoa `print(pessoa1.nome)`, teremos o seguinte retorno:

![Instanciando objetos em Python](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/Instanciando-objetos-em-Python.png)

## Declarando métodos

Como vimos anteriormente, uma classe possui atributos (que definem suas características) e métodos (que definem seus comportamentos).

Imagine que possuímos um atributo `ativo` na classe `Pessoa`. Toda pessoa criada em nosso sistema é inicializado como ativo, porém, imagine que queremos alterar o valor deste atributo e, assim, “desativar” a pessoa em nosso sistema e, além disso, exibir uma mensagem de que a pessoa foi “desativada com sucesso”.

Para isso, precisamos definir um comportamento para essa pessoa, assim, agora, ela poderá ser “desativada”.

Sendo assim, precisamos definir um método chamado “desativar” para criar este comportamento na classe `Pessoa`, como podemos ver abaixo:

```python
class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf
        self.ativo = ativo

    def desativar(self):
        self.ativo = False
        print("A pessoa foi desativada com sucesso")

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()

```

Para criarmos este “comportamento” na classe `Pessoa`, utilizamos a palavra reservada `def`, que indica que estamos criando um método da classe, além do nome do método e seus atributos, caso possuam.

Depois disso, é só definir o comportamento que este método irá realizar. Neste caso, o método vai alterar o valor do atributo “ativo” para “False” e imprimir a mensagem “A pessoa foi desativada com sucesso”, como podemos ver abaixo:

![Declarando métodos em Python](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/Declarando-metodos-em-Python.png)

## Declarando propriedades

Aparentemente o código acima funciona normalmente. Porém, temos um pequeno problema com o atributo “ativo”: ele é acessível para todo mundo. Ou seja, mesmo possuindo o método “desativar”, é possível alterar o valor do atributo “ativo” sem qualquer problema:

![Declarando propriedades em Python](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/Declarando-propriedades-em-Python.png)

Este comportamento do nosso programa dá brechas para que um usuário possa ser ativado ou desativado sem passar pelo método responsável por isso. Por isso, para corrigir este problema, devemos recorrer a um pilar importantíssimo da Orientação à Objetos: o encapsulamento.

Basicamente, o encapsulamento visa definir o que pode ou não ser acessado de forma externa da classe.

Existem três tipos de atributos de visibilidade nas linguagens orientadas a objetos, que são:

- **Public:** Atributos e métodos definidos como públicos poderão ser invocados, acessados e modificados através de qualquer lugar do projeto;
- **Private:** Atributos e métodos definidos como privados só poderão ser invocados, acessados e modificados somente por seu próprio objeto.
- **Protected:** Atributos e métodos definidos como protegidos só poderão ser invocados, acessados e modificados por classes que herdam de outras classes através do conceito de Herança, visto na última aula. Sendo assim, apenas classes “filhas” poderão acessar métodos e atributos protegidos.

No Python, diferente das linguagens completamente voltadas ao paradigma da orientação à objetos (Java, C#, etc.), estes atributos existem, mas não da forma “convencional”.

[  ![Python - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/python.svg)   Curso Python - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/python-fundamentos)

Para definir um atributo público, não há necessidade de realizar nenhuma alteração, por padrão, todos os atributos e métodos criados no Python são definidos com este nível de visibilidade.

Já se precisarmos definir um atributo como privado, adicionamos dois underlines (\_\_) antes do nome do atributo ou método:

```python
class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.nome = nome
        self.sexo = sexo
        self.cpf = cpf
        self.__ativo = ativo

    def desativar(self):
        self.__ativo = False
        print("A pessoa foi desativada com sucesso")

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()
    pessoa1.ativo = True
    print(pessoa1.ativo)

```

Porém, isso é apenas uma “convenção” do Python, ou seja, mesmo definindo o atributo com visibilidade privada (utilizando dois underlines antes de seu nome), ele poderá ser acessado de fora da classe:

![Declarando propriedades em Python](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/Declarando-propriedades-em-Python-Img-2.png)

Isso ocorre porquê estamos falando de “convenções”, ou seja, padrões que devem ser seguidos por desenvolvedores Python.

Porém, caso precisemos acessar os atributos privados de uma classe, o Python oferece um mecanismo para construção de propriedades em uma classe e, dessa forma, melhorar a forma de encapsulamento dos atributos presentes. É comum que, quando queremos obter ou alterar os valores de um atributo, criamos métodos getters e setters para este atributo:

```python
class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.__nome = nome
        self.__sexo = sexo
        self.__cpf = cpf
        self.__ativo = ativo

    def desativar(self):
        self.__ativo = False
        print("A pessoa foi desativada com sucesso")

    def get_nome(self):
        return self.__nome

    def set_nome(self, nome):
        self.__nome = nome

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()
    pessoa1.ativo = True
    print(pessoa1.ativo)

    # Utilizando geters e setters
    pessoa1.set_nome("José")
    print(pessoa1.get_nome())

```

Porém, ao tentar acessar o valor do atributo nome presente na classe, fica evidente que estamos obtendo esse dado através de um método. Pensando nisso, o time de desenvolvimento criou as Properties para prover um meio mais “elegante” para obter e enviar novos dados aos atributos de uma classe:

```python
class Pessoa:
    def __init__(self, nome, sexo, cpf, ativo):
        self.__nome = nome
        self.__sexo = sexo
        self.__cpf = cpf
        self.__ativo = ativo

    def desativar(self):
        self.__ativo = False
        print("A pessoa foi desativada com sucesso")

		def get_nome(self):
        return self.__nome

    def set_nome(self, nome):
        self.__nome = nome

    @property
    def nome(self):
        return self.__nome

    @nome.setter
    def nome(self, nome):
        self.__nome = nome

if __name__ == "__main__":
    pessoa1 = Pessoa("João", "M", "123456", True)
    pessoa1.desativar()
    pessoa1.ativo = True
    print(pessoa1.ativo)

# Utilizando geters e setters
    pessoa1.set_nome("José")
    print(pessoa1.get_nome())

    # Utilizando properties
    pessoa1.nome = "José"
    print(pessoa1.nome)

```

Com isso, podemos ver o quão mais “limpo” é o uso das properties para acessar ou alterar o valor de uma propriedade privada das classes no [Python](https://www.python.org/ "Python").

Se você quer conhecer mais sobre Python, acesse nosso [guia da linguagem](https://www.treinaweb.com.br/blog/guia-da-linguagem-python/ "guia da linguagem").

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/06/BANNER-BLOG-2-2.jpg) ](https://api.whatsapp.com/send/?phone=5544988609539&text=Olá,+li+o+artigo+no+blog+e+gostaria+de+saber+mais+sobre+a+TreinaWeb.)

- [ #Orientação a objetos ](https://www.treinaweb.com.br/blog/tag/orientacao-a-objetos)
- [ #Python ](https://www.treinaweb.com.br/blog/tag/python)

  Autor

 ![Ana Paula de Andrade](//secure.gravatar.com/avatar/76297b487187c82ae476e823018dbfc0?d=mm)## Ana Paula de Andrade

 Graduanda em Sistemas de Informação pelo Instituto Federal da Bahia. É responsável pelo atendimento ao cliente, gerenciamento de redes sociais e revisão de cursos, além da redação de artigos para o blog da TreinaWeb. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/ana-paula-andrade)  ## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/SQLMODEL-400x280.jpg)  [ Bancos de Dados ](https://www.treinaweb.com.br/blog/categoria/bancos-de-dados) 

     3 anos atrás

    ##  [ SQLModel: Simplificando o Mapeamento de Objetos para Bancos de Dados em Python ](https://www.treinaweb.com.br/blog/sqlmodel-simplificando-o-mapeamento-de-objetos-para-bancos-de-dados-em-python) 

     Desvende o SQLModel: Simplificando o Mapeamento de Objetos Python para Bancos de Dados Relacionais. Domine o CRUD de forma eficaz!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/07093212/PYTHON-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ O que é Python? ](https://www.treinaweb.com.br/blog/o-que-e-python) 

     Veja neste artigo o que é Python e suas principais características.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/07/24104425/heranca-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     8 anos atrás

    ##  [ Utilizando herança no Python ](https://www.treinaweb.com.br/blog/utilizando-heranca-no-python) 

     Veja na prática como usar herança no Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/07161700/gerenciamento-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     4 anos atrás

    ##  [ Empacotando e publicando pacotes Python no PyPi ](https://www.treinaweb.com.br/blog/empacotando-e-publicando-pacotes-python-no-pypi) 

     Neste artigo iremos aprender como funciona o processo de empacotar e distribuir nossos próprios pacotes Python no PyPi.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/conhecendo-variaveis-e-constantes-no-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Conhecendo variáveis e constantes no Python ](https://www.treinaweb.com.br/blog/conhecendo-variaveis-e-constantes-no-python) 

     Conheça neste artigo as variáveis e constantes no Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/guia-da-linguagem-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Guia da linguagem Python ](https://www.treinaweb.com.br/blog/guia-da-linguagem-python) 

     Entenda os principais conceitos para iniciar seus estudos neste guia da linguagem Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/consumindo-api-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Consumindo APIs com Python - Parte 2 ](https://www.treinaweb.com.br/blog/consumindo-apis-com-python-parte-2) 

     Veja neste artigo como consumir APIs com Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/consumindo-api-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Consumindo APIs com Python - Parte 1 ](https://www.treinaweb.com.br/blog/consumindo-apis-com-python-parte-1) 

     Veja neste artigo como consumir APIs com Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/07/24104425/heranca-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     8 anos atrás

    ##  [ Atribuição condicional no Python ](https://www.treinaweb.com.br/blog/atribuicao-condicional-no-python) 

     Veja neste artigo como utilizar a atribuição condicional em seus scripts Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/12/CAPA-PYTHON-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Como trabalhar com data e hora no Python ](https://www.treinaweb.com.br/blog/como-trabalhar-com-data-e-hora-no-python) 

     Como trabalhar com data e hora no Python com Datetime. No decorrer deste artigo, veremos exemplos de como utilizar o módulo datetime...

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/IDE-PYTHON-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     7 anos atrás

    ##  [ Principais IDEs para desenvolvimento Python ](https://www.treinaweb.com.br/blog/principais-ides-para-desenvolvimento-python) 

     Veja neste artigo as principais IDEs para desenvolvimento Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/10/24165940/chatbot-400x280.png)  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

     8 anos atrás

    ##  [ Criando um Chatbot com Python ](https://www.treinaweb.com.br/blog/criando-um-chatbot-com-python) 

     Veja neste artigo como criar um Chatbot utilizando o Python.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação**  Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **21h 20min 53s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br) Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
