Qu'est-ce que la distribution dynamique et duck-typing?
Lors de l'utilisation de Pycharm, Il le signale souvent une erreur, en disant:
Référence non résolue "nom". Cette inspection détecte des noms qui devraient
résoudre, mais ne le font pas. En raison de la distribution dynamique et duck-typing, c'est
possible dans un nombre limité mais utile nombre de cas. Et de très haut niveau
au niveau de la classe les éléments sont pris en charge mieux que les éléments d'instance.
J'ai snooped autour de ce sujet, mais la plupart des questions que j'ai trouver est de prévenir le message indiqué. ce que je veux savoir, c'est:
- Quelle est la dynamique de la répartition/duck-typing?
- Ce que sont (ou un exemple) de ces "utile nombre de cas"?
Vous devez vous connecter pour publier un commentaire.
Python utilise un canard en tapant convention. Cela signifie que vous n'avez pas à spécifier de quel type d'un nom. Contrairement à Java, par exemple, où vous devez spécifier explicitement que la variable peut être de type
int
ouObject
. Essentiellement, le type de la vérification est effectuée lors de l'exécution."Si ça marche comme un canard et il charlatans comme un canard, il doit etre un canard."
En Python tout semble fonctionner jusqu'à ce que vous utilisez à essayer de manipuler un objet de façon qu'il n'est pas conçu pour. Fondamentalement, un objet ne peut pas avoir une certaine méthode ou un attribut de l'autre, et vous ne trouverez pas cela jusqu'à ce que Python renvoie une erreur lors de l'essayer.
Répartition dynamique est la pratique du compilateur ou de l'environnement, le choix de la version d'une fonction polymorphe à utiliser lors de l'exécution. Si vous avez plusieurs implémentations d'une méthode, vous pouvez les utiliser de différentes façons, malgré les méthodes ont la même ou similaire propriétés/attributs. Voici un exemple:
Les deux classes ont un
flush()
méthode, mais le nom correct est choisi au moment de l'exécution.Python n'est pas le meilleur exemple de ce processus puisque les méthodes peuvent prendre de multiples paramètres et n'ont pas à être réimplémentée. Java est un meilleur exemple, mais je ne suis pas maîtrise suffisamment pour fournir un bon exemple.
foo
méthode, alors que l'argument peut avoir n'importe quel type à tous, tant qu'il fournitfoo
. Il n'a pas, par exemple, avoir un particulierfoo
-fournir ancêtre. Vrai type à l'exécution de la vérification de mettre en argument de type lorsque la fonction a été appelée en premier, et non pas lorsque l'argument a d'abord été utilisé dans le corps de la fonction.L'avertissement signifie que vous êtes en utilisant une variable qui PyCharm ne reconnaît pas, mais en raison de Python dynamique de la nature, il ne peut pas être sûr si c'est à droite ou que vous avez raison.
Par exemple, vous pouvez avoir le code suivant:
PyCharm va probablement se plaindre que
self.name
ne peut pas être résolu. Cependant, vous pouvez utiliser la classe comme ceci:qui est parfaitement valide (mais fragile).
Le message continue à dire que c'est de plus en plus confiant au sujet d'attributs et de méthodes qui sont moins ambigus. Par exemple:
Comme
my_instance_var
est définie dans le code source (un attribut de classe), PyCharm pouvez être sûr qu'il existe.(Ne pas utiliser les attributs de classe, sauf si vous savez ce que vous faites!)