使用内置函数名作为属性或方法标识符是不好的做法吗?

时间:2012-02-02 08:45:24

标签: python namespaces python-3.x reserved-words naming-conventions

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

但有没有理由不将它们用作属性或方法标识符?

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

4 个答案:

答案 0 :(得分:35)

它不会混淆口译员,但它可能会使阅读代码的人感到困惑。应避免在属性和方法中不必要地使用内置名称。

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

答案 1 :(得分:16)

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

有选择地引用PEP20:

  

美丽胜过丑陋   简单比复杂更好   可读性很重要   如果实施难以解释,这是一个坏主意。

看到对myobject.dict()的来电,很自然地会假设它会返回myobject.__dict__,或myobject.id()返回与id(myobject)相同的内容

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

答案 2 :(得分:13)

不,那没关系。由于需要对象引用,因此无法使它们影响内置函数。

答案 3 :(得分:0)

当输入变量模仿python内置函数时,我会在函数上来回移动很多。例如,单词bytes是python内置的,但考虑一个解析字节的实用程序库:

def parse_bytes(bytes):
    pass

我认为这具有很好的可读性,但是pep8短毛猫不喜欢它。相反,我可以做

def parse_bytes(bytearray):
    pass

def parse_bytes(somebytes):
    pass

或使用类型提示

def parse_bytes(b: bytes):
    pass

但是所有这些似乎都更糟。如果变量名称为input ...

,也会发生同样的情况

一天结束时,我通常会和somebytes一起去