es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puede un atributo de clase opacar a un elemento incorporado en Python?

Si tengo un código como este:

class Foo():
   def open(self, bar):
       # Haciendo cosas interesantes aquí, es decir, abriendo "bar"
       pass

Cuando ejecuto flake8 con el complemento flake8-builtins, obtengo el error:

A003 el atributo de la clase "open" está ocultando un built-in de Python

No entiendo cómo el método podría ocultar la función incorporada open, porque el método solo puede ser llamado utilizando una instancia (es decir, self.open("") o someFoo.open("")). ¿Hay alguna otra forma en la que el código que espera llamar a la función incorporada termine llamando al método? ¿O es este un falso positivo del complemento flake8-builtins?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El complemento flake8-builtins está indicando un posible problema con el código. Aunque el método open solo se puede llamar utilizando una instancia, aún es posible que el atributo de clase open sombree la función integrada open. Esto significa que si alguien llamara a la función open fuera de la clase, en realidad estarían llamando al atributo de clase open, que puede que no tenga el comportamiento deseado.

    Para evitar este problema, se recomienda utilizar un nombre diferente para el método, o acceder a la función integrada open utilizando el nombre completamente calificado (builtins.open en Python 3.x o __builtin__.open en Python 2.x).

Comments are closed.