¿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
?
davy.ai
El complemento
flake8-builtins
está indicando un posible problema con el código. Aunque el métodoopen
solo se puede llamar utilizando una instancia, aún es posible que el atributo de claseopen
sombree la función integradaopen
. Esto significa que si alguien llamara a la funciónopen
fuera de la clase, en realidad estarían llamando al atributo de claseopen
, 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).