我知道不要将内置函数名称用作变量标识符。
但是,是否有任何理由不使用它们作为属性或方法标识符?
例如,编写my_object.id = 5
或在自己的类中定义实例方法dict
是否安全?
我知道不要将内置函数名称用作变量标识符。
但是,是否有任何理由不使用它们作为属性或方法标识符?
例如,编写my_object.id = 5
或在自己的类中定义实例方法dict
是否安全?
这不会让解释器困惑,但可能会让阅读您代码的人感到困惑。应避免不必要地使用内置的属性和方法名称。
另一个不良影响是,覆盖内置名称会使大多数支持Python的编辑器(vi,emacs,pydev,idle等)的语法突出显示功能失效。此外,一些Lint工具也会警告这种做法。
是的,这是不好的编程习惯。尽管这不会立即对您造成任何影响,但它仍会损害代码的可读性。
引用PEP20中的一句话:
美观胜于丑陋。
简洁胜于复杂。
可读性很重要。
如果实现难以解释,那么这是一个坏主意。
看到调用myobject.dict()
,自然会假设它将返回myobject.__dict__
,或者myobject.id()
返回与id(myobject)
相同的东西。
他们可能会发现自己错了;但这需要时间和努力,可能会在他们弄清楚之前导致一些错误。把你的属性命名为myobject.object_id_number
虽然更长,但可以更清楚地表明它与id(myobject)
是不同的。
不,没关系。因为需要一个对象引用,所以无法让它们遮蔽内置的对象。
__
开头或与关键字相同的标识符? - max__
开头。如果这是一个私有属性,__foo
被压缩也无伤大雅。__foo__
表示它是Python内部使用的。在这样做方面没有问题,但这是不好的形式。 - Lennart Regebro当输入变量模仿Python内置函数时,我在函数上来回思考很多次。例如,单词 bytes
是一个Python内置函数,但考虑一个解析字节的实用程序库:
def parse_bytes(bytes):
pass
def parse_bytes(bytearray):
pass
def parse_bytes(somebytes):
pass
或者使用类型提示
def parse_bytes(b: bytes):
pass