我知道永远不要使用内置函数名作为变量标识符。
但有没有理由不将它们用作属性或方法标识符?
例如,在我自己的类中编写my_object.id = 5
或定义实例方法dict
是否安全?
答案 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
一起去