【发布时间】:2012-02-24 22:20:06
【问题描述】:
我知道永远不要使用内置函数名称作为变量标识符。
但是有什么理由不将它们用作属性或方法标识符?
例如,写my_object.id = 5是否安全,或者在我自己的类中定义实例方法dict?
【问题讨论】:
标签: python namespaces python-3.x reserved-words naming-conventions
我知道永远不要使用内置函数名称作为变量标识符。
但是有什么理由不将它们用作属性或方法标识符?
例如,写my_object.id = 5是否安全,或者在我自己的类中定义实例方法dict?
【问题讨论】:
标签: python namespaces python-3.x reserved-words naming-conventions
它不会混淆解释器,但可能会使阅读您的代码的人感到困惑。应避免对属性和方法不必要地使用内置名称。
另一个不良影响是,在大多数支持 python 的编辑器(vi、emacs、pydev、idle 等)中,内置阴影会混淆语法高亮器。此外,一些 lint 工具会警告这种做法。
【讨论】:
是的,这是不好的做法。它可能不会立即为您破坏任何东西,但它仍然会损害代码的可读性。
选择性地引用 PEP20:
美丽胜于丑陋。
简单胜于复杂。
可读性很重要。
如果实现难以解释,那就是个坏主意。
看到对myobject.dict() 的调用很自然地会假设它会返回myobject.__dict__,或者myobject.id() 返回与id(myobject) 相同的内容
他们可能会发现自己错了;但这需要时间和精力,并且在他们弄清楚时可能会导致一些错误。调用你的属性myobject.object_id_number 更长,但更清楚地表明它与id(myobject) 不同
【讨论】:
不,没关系。由于需要对象引用,因此无法让它们隐藏内置。
【讨论】:
__ 开头的标识符或与关键字相同的标识符?
__ 开头。 __foo get 被破坏了,如果它是私有财产,这不是问题。 __foo__ 表示它是 Python 内部。这样做没有问题,但这是不好的形式。
当输入变量模仿 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
【讨论】: