"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 o Super() do Python 3.x funciona sem argumentos e quais são as possíveis armadilhas?

Como o Super() do Python 3.x funciona sem argumentos e quais são as possíveis armadilhas?

Publicado em 2024-11-07
Navegar:298

 How Does Python 3.x\'s Super() Work Without Arguments, and What Are the Potential Pitfalls?

Python 3.x's Super Magic: Unraveling the Mysteries

Python 3.x introduziu uma reviravolta surpreendente em seu método super(), permitindo chamadas sem argumentos. Essa mudança aparentemente inócua traz consequências significativas e magia inerente.

Descobrindo a magia

Para manter o princípio DRY, o novo comportamento super() ignora a classe explícita nomenclatura. Ele tem uma célula classe especial que recupera o objeto de classe original, evitando as armadilhas da religação que atormentavam a superabordagem anterior.

Consequences of the Magic

Infelizmente, essa mágica tem uma desvantagem. Revincular o nome super() a uma variável diferente, como super_, pode atrapalhar sua funcionalidade. Isso ocorre porque a célula só é criada quando super ou classe é referenciada dentro de um método.

Armadilhas Práticas

Esse comportamento pode representar riscos para programadores desavisados:

  • Religar super() pode levar a exceções inesperadas.
  • Contar com super(type(self), self) ou super(self.__class__, self) pode resultar em recursão infinita quando invocado a partir de uma classe derivada.
  • Decoradores de classe que retornam novos objetos de classe podem invalidar a ligação do nome da classe a super().

Além de Super()

Curiosamente, super() não é a única entidade Pythonic afetada por problemas de religação. Outros exemplos incluem:

  • this no RPython do PyPy (semelhante ao __class__ do super())
  • Métodos de instância acessados ​​por meio de objetos de método não vinculados (potencialmente quebrando @ property e @classmethod)
  • Incorporados como print, object e list quando chamados sem notação de ponto

Implicações para desenvolvedores

Embora a magia de super() possa ser útil, ela merece cautela. Compreender suas complexidades ajuda a evitar erros de tempo de execução. Ao usar religações, os programadores devem considerar referenciar class explicitamente ou utilizar métodos alternativos de invocação super().

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