Cuando se utiliza Pycharm, a menudo Se señala un error, diciendo:

Referencia sin resolver ‘nombre’. Esta inspección detecta los nombres de los que deben
resolver, pero no. Debido a la dinámica de envío y pato escritura, esto es
posible en un útil pero limitado número de casos. De nivel superior y
a nivel de clase de elementos son compatibles mejores que los elementos de instancia.

He snooped todo acerca de esto, pero la mayoría de las preguntas y la información que puedo encontrar es acerca de la prevención de mensaje que se muestra. lo que quiero saber es:

  • ¿Qué es la dinámica de envío/pato de escribir?
  • Lo que son (o un ejemplo de este «útil número de casos»?
InformationsquelleAutor Rick M. | 2018-02-14

2 Comentarios

  1. 6

    Python utiliza un pato escritura convención. Esto significa que usted no tiene que especificar qué tipo de un nombre. A diferencia de Java, por ejemplo, donde se debe especificar explícitamente que la variable puede ser de tipo int o Object. Esencialmente, la comprobación de tipos se realiza en tiempo de ejecución.

    «Si camina como un pato y grazna como un pato, entonces debe ser un pato.»

    En Python todo parece funcionar hasta que el uso de intentar manipular un objeto de una manera que no está diseñado para. Básicamente, un objeto no puede tener un cierto método o atributo que otro puede, y usted no encontrará esto hasta que Python lanza un error al intentarlo.

    De Envío dinámico, es la práctica del compilador o del entorno de la elección de la versión de un polimórficos función para utilizar en tiempo de ejecución. Si usted tiene múltiples implementaciones de un método, se puede utilizar en diferentes formas, a pesar de los métodos que tienen el mismo o similar propiedades/atributos. He aquí un ejemplo:

    class Foo:
       def flush():
           pass
    
    class Bar:
        def flush():
           pass

    Ambas clases tienen un flush() método, pero el nombre correcto es elegido en tiempo de ejecución.

    Python no es el mejor ejemplo de este proceso puesto que los métodos pueden tomar múltiples parámetros y no tiene que ser reimplantado. Java es un mejor ejemplo, pero no estoy con fluidez suficiente para proporcionar un ejemplo correcto.

    • Pato escritura va más allá de la comprobación de tipos, en algún sentido. El tipo no importa todo, mientras que proporciona el comportamiento correcto. Si una función que espera un argumento a tener un foo método, entonces ese argumento puede tener cualquier tipo en absoluto, mientras que proporciona foo. No, por ejemplo, tienen una particular foo-proporcionar antepasado. Cierto tipo de tiempo de ejecución de la comprobación de hacer cumplir el argumento del tipo cuando la función del primer llamado, no cuando el argumento fue utilizado por primera vez en el cuerpo de la función.
  2. 4

    La advertencia significa que usted está utilizando una variable que PyCharm no reconoce, pero debido a Python dinámico de la naturaleza no puede estar seguro de si está bien o está a la derecha.

    Por ejemplo, usted puede tener el siguiente código:

    class myClass():
    
        def myfunc(self):
            print(self.name)

    PyCharm probablemente se quejan de que self.name no puede ser resuelto. Sin embargo, usted puede utilizar la clase como esta:

    my_class = myClass()
    my_class.name = "Alastair"
    my_class.myfunc()

    que es perfectamente válido (aunque frágil).

    El mensaje va a decir que es más seguro acerca de los atributos y métodos que son menos ambiguos. Por ejemplo:

    class myClass():
        my_instance_var = "Al"
    
        def myfunc(self):
            print(self.my_instance_var)

    Como my_instance_var se define en el código fuente (un atributo de clase), PyCharm puede estar seguro de que existe.

    (No utilice los atributos de la clase a menos que sepas lo que estás haciendo!)

Dejar respuesta

Please enter your comment!
Please enter your name here