我可以使用内置名称作为Python类的方法名称吗?

can*_*tag 8 python pep8

我有一个执行一些简单数据操作的类,我需要三个方法:set,add,sub:

class Entry():  # over-simplified but should be enough for the question
    def __init__(self, value):
        self.set(value)
    def set(self, value):
        self.value=value
    def add(self, value):
        self.value += value
    def sub(self, value):
        self.value -= value
Run Code Online (Sandbox Code Playgroud)

问题在于"set"方法,但将其定义为类方法不应与"set()"内置函数冲突.

Python的风格指南规定的职能和方法不应阴影内置函数参数的名字,但正是这种方法名称的情况下?

显然我可以选择另一个方法名称,但问题更通用,对其他可能的方法名称(即过滤器,求和,输入)有效.

Tad*_*sen 6

关于不遮盖内置名称的整个事情是,您不想阻止自己使用它们,因此在您的代码执行此操作时:

x.set(a) #set the value to a
b = set((1,2,3)) #create a set
Run Code Online (Sandbox Code Playgroud)

您仍然可以访问内置set函数,因此不会发生冲突,唯一的问题是,如果要set 在类定义中使用

class Entry():
    def __init__(self, value):
        self.set(value)
    def set(self, value):
        self.value=value
    possible_values = set((1,2,3,4,5)) #TypeError: set() missing 1 required positional argument: 'value'
Run Code Online (Sandbox Code Playgroud)

在类定义内部(仅存在)内建的名称被遮盖,因此您必须考虑宁愿解决:不太可能出现的情况,需要使用它set来定义类范围变量并获取错误或使用非-方法的直观名称。

还要注意,如果您喜欢使用对您有意义的方法名称,并且还想set在类定义中使用,您仍然可以使用builtins.setpython 3或__builtin__.setpython 2 访问它。