1
resposta

[Duvida] Diferença entre uma funções:

Qual a diferença entre uma função que se inicia com um '_' para uma que se inicia com '_ _'

Ex:

def __int__(self): e def _dir_(self):

1 resposta

Uma função em Python é como uma receita que diz ao programa o que fazer. Quando o programa precisa fazer algo, ele chama a função que contém as instruções necessárias.

Existem dois tipos de funções que começam com sublinhado em Python: as que começam com um único sublinhado () e as que começam com dois sublinhados (_).

As funções que começam com um único sublinhado (_) são uma convenção usada pelos desenvolvedores para indicar que essa função não deve ser usada fora do módulo em que foi definida. É como se a função fosse "interna" do módulo e não devesse ser usada por outros programas.

Por outro lado, as funções que começam com dois sublinhados () são funções especiais em Python chamadas de "métodos mágicos". Esses métodos têm um comportamento pré-definido em Python e são usados para definir o comportamento de objetos em operações específicas. Por exemplo, o método __init é usado para inicializar um objeto quando ele é criado a partir de uma classe.

Resumindo: funções que começam com um único sublinhado são uma convenção para indicar que a função é "interna" do módulo e não deve ser usada fora dele, enquanto funções que começam com dois sublinhados são funções especiais que têm um comportamento pré-definido em Python e são usadas para definir o comportamento de objetos em operações específicas.

Aqui estão alguns exemplos em código para ilustrar a diferença entre as funções que começam com um único sublinhado e as que começam com dois sublinhados:


class Exemplo:

    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    def _metodo_interno(self):
        print("Este é um método interno que não deve ser usado fora desta classe.")

    def __metodo_magico__(self):
        print("Este é um método mágico que tem um comportamento especial.")

Neste exemplo, a classe Exemplo tem um método mágico init que é usado para inicializar os atributos do objeto quando ele é criado a partir da classe. Ele tem dois argumentos (arg1 e arg2) que são atribuídos aos atributos self.arg1 e self.arg2.

A classe também tem um método metodointerno que começa com um único sublinhado. Isso indica que o método é "interno" e não deve ser usado fora da classe. No entanto, ele ainda pode ser acessado fora da classe, mas é uma convenção de nomenclatura que indica que ele deve ser tratado como "privado".

Finalmente, a classe tem um método metodo_magico que começa com dois sublinhados. Este é um método especial em Python que tem um comportamento pré-definido e é usado para definir o comportamento de objetos em operações específicas. No entanto, neste exemplo, o método não faz nada além de imprimir uma mensagem.

Para usar esses métodos em um programa, podemos criar um objeto da classe Exemplo e chamar seus métodos:


objeto = Exemplo("valor1", "valor2")
objeto._metodo_interno()  # Este método ainda pode ser acessado fora da classe
objeto.__metodo_magico__()  # Isso resulta em um erro, porque o método foi renomeado pelo interpretador Python

Observe que, ao tentar chamar o método metodo_magico diretamente no objeto, ocorre um erro. Isso ocorre porque o interpretador Python renomeia automaticamente o método para evitar conflitos de nome. Se quisermos chamar esse método, podemos fazer isso usando seu nome "renomado":


objeto._Exemplo__metodo_magico__()  # Isso chama o método mágico renomeado pelo interpretador Python

Espero que isso ajude a esclarecer a diferença entre as funções que começam com um único sublinhado e as que começam com dois sublinhados em Python!