52

我知道永远不要使用内置函数名称作为变量标识符。

但是有什么理由不将它们用作属性或方法标识符吗?

例如,在我自己的类中编写my_object.id = 5或定义实例方法是否安全?dict

4

4 回答 4

42

它不会使解释器感到困惑,但可能会使阅读您的代码的人感到困惑。应避免不必要地使用属性和方法的内置名称。

另一个不良影响是,在大多数支持 python 的编辑器(vi、emacs、pydev、idle 等)中,内置阴影会混淆语法荧光笔。此外,一些 lint 工具会警告这种做法。

于 2012-02-02T08:59:06.130 回答
19

是的,这是不好的做法。它可能不会立即为您破坏任何东西,但它仍然会损害代码的可读性。

选择性地引用 PEP20:

美丽总比丑陋好。
简单胜于复杂。
可读性很重要。
如果实现很难解释,那是个坏主意。

看到对它的调用myobject.dict()会很自然地假设它会返回myobject.__dict__,或者myobject.id()返回与id(myobject)

他们可能会发现自己错了;但这需要时间和精力,并且在他们弄清楚时可能会导致一些错误。调用您的属性myobject.object_id_number要长得多,但更清楚地表明它与id(myobject)

于 2012-02-02T08:59:03.963 回答
11

不,没关系。由于需要对象引用,因此无法让它们隐藏内置。

于 2012-02-02T08:47:21.620 回答
0

当输入变量模仿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

于 2020-02-26T22:30:45.160 回答