我知道永远不要使用内置函数名称作为变量标识符。
但是有什么理由不将它们用作属性或方法标识符吗?
例如,在我自己的类中编写my_object.id = 5
或定义实例方法是否安全?dict
我知道永远不要使用内置函数名称作为变量标识符。
但是有什么理由不将它们用作属性或方法标识符吗?
例如,在我自己的类中编写my_object.id = 5
或定义实例方法是否安全?dict
它不会使解释器感到困惑,但可能会使阅读您的代码的人感到困惑。应避免不必要地使用属性和方法的内置名称。
另一个不良影响是,在大多数支持 python 的编辑器(vi、emacs、pydev、idle 等)中,内置阴影会混淆语法荧光笔。此外,一些 lint 工具会警告这种做法。
是的,这是不好的做法。它可能不会立即为您破坏任何东西,但它仍然会损害代码的可读性。
选择性地引用 PEP20:
美丽总比丑陋好。
简单胜于复杂。
可读性很重要。
如果实现很难解释,那是个坏主意。
看到对它的调用myobject.dict()
会很自然地假设它会返回myobject.__dict__
,或者myobject.id()
返回与id(myobject)
他们可能会发现自己错了;但这需要时间和精力,并且在他们弄清楚时可能会导致一些错误。调用您的属性myobject.object_id_number
要长得多,但更清楚地表明它与id(myobject)
不,没关系。由于需要对象引用,因此无法让它们隐藏内置。
当输入变量模仿python内置函数时,我经常在函数上来回走动。例如,这个词bytes
是 python 内置的,但考虑一个解析字节的实用程序库:
def parse_bytes(bytes):
pass
我认为这具有很好的可读性,但 pep8 linters 不喜欢它。相反,我可以做
def parse_bytes(bytearray):
pass
def parse_bytes(somebytes):
pass
或者使用类型提示
def parse_bytes(b: bytes):
pass
但所有这些似乎都更糟。input
如果你的变量名是......也会发生同样的事情
在一天结束的时候,我通常会去somebytes