使用自定义双下划线变量在Python中有多推荐?

6
我想知道在Python脚本中定义和使用自定义双下划线变量/函数是否是推荐的/Pythonic的做法?例如,SQLAlchemy中使用的__tablename__或者__validateitem__()(在应用__setitem__()之前验证一个项目的自定义函数)。
如果它确实定义了某些特殊魔术功能,或者该特定变量/函数确实以特殊方式使用(如上面两个例子),我认为使用它们是一个好主意。
我对最佳编码实践的论点和使用这种命名方式可能存在的潜在风险感兴趣。
1个回答

4

来自PEP8:

__double_leading_and_trailing_underscore__:存在于用户可控命名空间中的“魔法”对象或属性。例如:__init____import____file__。永远不要发明这样的名称;只能按照文档使用它们。

因此,建议不要在您自己的变量中使用双下划线语法。


这是因为它可能会误导用户认为它是一个标准定义的名称吗?还是因为它旨在具有未来可扩展性,因为随时可以在标准库中实现具有该名称的变量?有些情况下,使用这些名称确切地意味着强调了某些“神奇”的事情发生。 - linkyndy
1
用户定义的__是一个私有标记。由于Python是解释性语言,实际上并没有真正的私有变量/方法。只使用一个下划线将您的变量标记为“小心使用”。访问__变量比通常要慢,因此您没有理由使用它。 - cox
什么支持这样的解释,即程序员不应该发明这样的名称?我的问题是,程序员在这里为程序员编写API。哪一个是“你自己”的程序员? - n611x007
1
将问题提到 https://dev59.com/_F4c5IYBdhLWcg3wY5mW - n611x007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接