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'
如果有这样的代码:
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'