class 属性可以隐藏 Python 中的内置属性吗?

Can a class attribute shadow a built-in in Python?

如果有这样的代码:

class Foo():
   def open(self, bar):
       # Doing some fancy stuff here, i.e. opening "bar"
       pass

当我 运行 flake8 with the flake8-builtins 插件时出现错误

A003 class attribute "open" is shadowing a python builtin

我不明白该方法怎么可能隐藏内置的 open函数,因为该方法只能使用实例调用(即self.open("")someFoo.open("")).是否有其他一些期望调用内置方法的代码最终会调用该方法?或者这是 flake8-builtins 插件的误报?

代码应该没有问题。只要该函数是用 self.open() 而不是 open() 引用的,它就应该可以工作。只需确保 class 还没有 open() 函数。

这不是一个真正的实际案例,但是如果您想在影子函数初始化后在 class 级别上使用内置函数,您的代码将会失败:

class Foo:
    def open(self, bar):
        pass

    with open('myfile.txt'):
        print('did I get here?')

>>> TypeError: open() missing 1 required positional argument: 'bar'

其他内置函数也是如此,例如print

class Foo:
    def print(self, bar):
        pass

    print('did I get here?')

>>> TypeError: print() missing 1 required positional argument: 'bar'