"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como as funções, os métodos não vinculados e os métodos vinculados diferem no sistema de resolução de métodos do Python?

Como as funções, os métodos não vinculados e os métodos vinculados diferem no sistema de resolução de métodos do Python?

Publicado em 2024-11-10
Navegar:714

How do Functions, Unbound Methods, and Bound Methods Differ in Python\'s Method Resolution System?

Revelando a natureza das funções, métodos não vinculados e métodos vinculados

O conceito de classes e métodos é fundamental para paradigmas de programação orientada a objetos . Compreender as nuances e relacionamentos entre funções, métodos não vinculados e métodos vinculados é crucial para dominar as complexidades do sistema de resolução de métodos do Python.

Definindo as entidades

  • Funções: Criadas usando a instrução def, as funções são unidades autônomas de código sem associação direta com qualquer classe.
  • Métodos não consolidados: Quando uma função se torna parte de uma classe definição, ele se transforma em um método não vinculado. Essa transição ocorre automaticamente no Python 2, mas é obsoleta no Python 3.
  • Bound Methods: Criados acessando um método em uma instância de classe, os métodos vinculados recebem implicitamente a instância como seu primeiro parâmetro ( self).

Transformações e Acessibilidade

  • Função para Método Unbound: Usando types.MethodType ou acessando uma função dentro um corpo de classe efetivamente o converte em um método não vinculado.
  • Método não vinculado em método vinculado: Acessar um método não vinculado em uma instância de classe resulta na criação de um método vinculado.
  • Função para método vinculado: Análogo à etapa anterior, acessar uma função em uma instância de classe gera diretamente um método vinculado.

Principais diferenças

  • Conscientização de classe: Um método não vinculado carrega conhecimento da classe à qual pertence, enquanto funções e métodos vinculados não possuem esse reconhecimento.
  • Acesso instanciado: Ao contrário dos métodos não vinculados, que necessitam de uma instância para serem executados, funções e métodos vinculados podem ser chamados diretamente.

Equivalência e uso

Em ambos Python 2 e Python 3, as seguintes expressões são funcionalmente equivalentes:

f1(C())
C.f1(C())
C().f1()

A vinculação de uma função a uma instância cria uma versão modificada onde o primeiro parâmetro é inerentemente definido para a instância fornecida. Essencialmente, este método vinculado se comporta de forma idêntica às seguintes formas alternativas:

lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())

From Unbound to Bound

Uma instância de uma classe Python 2 não tem nenhum atributo direto correspondente a métodos não vinculados, que são em vez disso, recuperável por meio do atributo __dict__ da própria classe. No entanto, acessar um método não vinculado em uma instância resulta em sua conversão automática em um método vinculado.

Conclusão

Compreendendo as distinções entre funções, métodos não vinculados e métodos vinculados capacita você a utilizar efetivamente o mecanismo de resolução de métodos do Python. Compreender os mecanismos de ligação e transformação permite que você navegue pelas complexidades da codificação orientada a objetos com facilidade.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3