• Conceitos de P.O.O

Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Declarar método
  2. Invocar um método
  3. Construtor e destrutor
  4. Parâmetros e retorno
  5. Método estático
  6. "Sobrecarga" de método
  7. Uso do self
  8. "Ponteiro" para método
  9. iscallable
  10. propriedade

O comando pass utilizado nos exemplos a seguir pode ser visto em Python Básico: Função

Os métodos são funções que nossos objetos intanciados de classes possuem e que estão disponíveis para execução ou uso. Esses métodos ficam acessíveis de acordo com o encapsulamento, público, privado ou protegido.

Tab. 1: Encapsulamento
public private protected
nome-metodo __nome-metodo _nome-metodo
Sintaxe
def nome_metodo() #público
    #corpo método

def _nome_metodo() # protegido
    #corpo método

def __nome_metodo() #privado
    #corpo método
Exemplo 1
class classe:
    def metodo():
        pass
 
    def _metodo2():
        pass
        
    def __metodo3():
        pass   
Saída
-

Os métodos possuem as mesmas características utilizadas pelas funções vistas em Python: Função e também o uso de atributos e métodos.

A chamada dos métodos de nossos objetos é feita utilizando o operador (.) mencionado anteriormente. Abaixo algumas regras para acessar métodos de acordo com o encapsulamento.

  1. Os métodos definidos como private só podem ser invocados internamente.
  2. Os métodos definidos como public podem ser invocados externamente.
  3. Os métodos definidos como protected podem ser invocados internamente e classes filhas.
Sintaxe
nome_objeto.nome_metodo()
Exemplo 2
class classe:
    def metodo():
        print("metodo")
    
    def _metodo2():
        print("metodo2")
        
    def __metodo3():
        print("metodo2")
    
obj = classe
obj.metodo()
obj._metodo2()
obj.__metodo3()
Saída
metodo
metodo2
Traceback (most recent call last):
  File "/home/main.py", line 14, in <module>
    obj.__metodo3("teste","teste","teste")
AttributeError: type object 'classe' has no attribute '__metodo3'. Did you mean: '_metodo2'?

Para a passagem de argumentos para funções em Python, semelhante a outras linguagens de programação, declaramos todos os parâmetros de acordo com a sintaxe abaixo:

Sintaxe
def nome_metodo( param1, ... , paramN ) -> <tipo_retorno>:
    #corpo
    return valor
Onde
param1..N: lista de parâmetros separados por (,)
<tipo_retorno>: tipo de dado de retorno. Opcional
Exemplo 3: parâmetro
class classe:
    def metodo(p):
        print(p)
    
    def metodo2(a,b):
        print(a,b)
        
    def metodo3(*pa): #parâmetros variáveis
        for item in pa:
            print(item)
        
obj = classe
obj.metodo(1)
obj.metodo2(1,2)
obj.metodo3(1,2,3)
Saída
1
1 2
Exemplo 4: retorno
class classe:
    def metodo(p) -> int: #tipado
        return p*2
    
    def metodo2(a,b): #não tipoda
        return a + b
        
obj = classe
print(obj.metodo(1))
print(obj.metodo2(1,2))
print(obj.metodo2("ab,"cd"))
Saída
2
3
abcd

Os métodos construtor e destrutor são métodos especiais. O método construtor e invocados quando criamos/instanciamos objetos e contém codificação para iniciar atributos de nossas classes.

Em Python, o construtor é identificado com a palavra reservada __init__ tendo seu primeiro parâmetro o self obrigatório como na sintaxe abaixo:

Sintaxe: construtor
def __init__(self, <lista_parametros>):
    #corpo
Exemplo 3
class classe:
    def __init__(self):
        print("__init__")
              
obj = classe()
Saída
__init__

O método destrutor é outro método, não obrigatório, especial que é chamado para liberar os dados utilizados na criação de nossos objetos.

O método destrutor é identificado com a palavra reservada __del__ tendo seu primeiro parâmetro o self obrigatório como visto na sintaxe abaixo:

Sintaxe
def __del__(self):
    #corpo
Exemplo 4
class classe:
    def __init__(self):
        print("__init__")
        
    def __del__(self):
        print("__del__")
        
obj = classe()
Saída
__init__
__del__

Um métodos estático é método que em sua declaração faz uso do decorador @staticmethod para informar que o método ficará "visível" sem que seja necessário instanciar um novo objeto para invocá-lo.

Sintaxe
@staticmethod
def nome_metodo()
    #corpo

O acesso aos métodos estáticos são feitos utilizando o nome da classe em conjunto com o operador (.) seguido do nome do métodos que desejamos invocar.

Sintaxe
nome_classe.nome_metodo()
Exemplo 5
class classe:
    @staticmethod
    def metodo():
        print(metodo)
        
classe.metodo()
Saída
metodo

  1. 12/09/2025 - revisão 2 - Ajustes: pontuais, target de links, sintaxes e objetivos; Adição: 'Parâmetro e retorno'
  2. 19/09/2024 - revisão 1 - Correção de descrição de métodos 'Construtor' e 'Destrutor'; ajustes gramaticais; outros ajustes
  3. 20/02/2024 - versão inicial