我有一个执行一些简单数据操作的类,我需要三个方法: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的风格指南规定的职能和方法不应阴影内置函数参数的名字,但正是这种方法名称的情况下?
显然我可以选择另一个方法名称,但问题更通用,对其他可能的方法名称(即过滤器,求和,输入)有效.
关于不遮盖内置名称的整个事情是,您不想阻止自己使用它们,因此在您的代码执行此操作时:
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 访问它。
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |