logo

O que é digitação de pato em Python?

Neste tutorial, aprenderemos sobre digitação de pato. É um termo popular em Python e vem de dizer: 'Se ele anda como um pato, nada como um pato, se parece com um pato, então provavelmente deveria ser um pato.'

A afirmação acima dá uma ideia para identificar um pato. Aqui não precisamos de uma sequência genómica do pato. Tiramos nossa conclusão pelo seu comportamento e aparência externa.

Discutiremos o que significa exatamente digitação de pato na programação Python.

Python segue o EAFP (É mais fácil pedir perdão do que permissão) em vez de LBLY (Olhe antes de pular) filosofia. O EAFP está um tanto ligado ao estilo de 'digitação de pato'.

Digitação dinâmica vs. estática

A principal razão para usar a digitação duck é fornecer suporte para digitação dinâmica em Programação Python . Em Python, não precisamos especificar o tipo de dados da variável e podemos reatribuir os diferentes valores de tipo de dados à mesma variável em código adicional. Vejamos o exemplo a seguir.

Exemplo -

 x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x)) 

Saída:

caractere para int em java
 

Como podemos ver no código acima, atribuímos um número inteiro a uma variável x, tornando-o do interno tipo. Em seguida, atribuímos uma string e uma lista à mesma variável. O intérprete Python aceita as alterações de tipos de dados da mesma variável. Este é um comportamento de digitação dinâmico.

Muitas outras linguagens de programação, como Java e Swift, são do tipo estático. Precisamos declarar variáveis ​​com os tipos de dados. No exemplo abaixo, tentamos fazer a mesma coisa usando Swift em vez de Python.

Exemplo -

 # integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language' 

O código acima não pode ser compilado porque não foi possível atribuir uma string na linguagem Swift. Porque variável a foi declarado como um número inteiro.

módulos de mola

Conceito de digitação de pato

Anteriormente, discutimos que Python é uma linguagem de tipo dinâmico. No entanto, podemos usar a abordagem dinâmica com tipos de dados personalizados. Vamos entender o exemplo a seguir.

Exemplo -

 class VisualStudio: def execute(self): print('Compiling') print('Running') print('Spell Check') print('Convention Check') class Desktop: def code(self, ide): ide.execute() ide = VisualStudio() desk = Desktop() desk.code(ide) 

Saída:

 Compiling Running Spell Check Convention Check 

No código acima, criamos um Estúdio visual aula que tem que executar() método. Na classe desktop, passamos o ide como argumento no code(). Um vai é um objeto de Estúdio visual aula. Com a ajuda do ide, chamamos o executar() método da classe VisualStudio.

Vejamos outro exemplo.

java duplo para string

Exemplo - 2

 class Duck: def swim(self): print('I'm a duck, and I can swim.') class Sparrow: def swim(self): print('I'm a sparrow, and I can swim.') class Crocodile: def swim_walk(self): print('I'm a Crocodile, and I can swim, but not quack.') def duck_testing(animal): animal.swim() duck_testing(Duck()) duck_testing(Sparrow()) duck_testing(Crocodile()) 

Saída:

 I'm a duck, and I can swim. I'm a sparrow, and I can swim. Traceback (most recent call last): File '', line 24, in File '', line 19, in duck_testing AttributeError: 'Crocodile' object has no attribute 'swim' 

No código acima, a instância da classe Duck é refletida chamando o pato_testando função. Isso também acontece com a classe Sparrow, que implementa o nadar() função. Mas no caso da classe Crocodile, ela falha na avaliação do teste de pato porque não implementa o nadar() função.

Como a digitação de pato suporta EAFP

A digitação duck é o estilo mais apropriado para o EAFP porque não precisamos nos concentrar no 'tipo' do objeto. Precisamos apenas cuidar dele comportamento e capacidade . Vejamos as seguintes afirmações.

Quando vemos muitos blocos if-else, então é um estilo de codificação LBYL.

Mas se virmos muitos blocos try-except, então é provável que seja um codificador EAFP.