“__method__”和“method”之间的区别
__method__
, method
和_method__
什么_method__
?
是否有任何或某些随机的原因,人们认为__doc__
应该是正确的,而不是doc
。 是什么让一种方法比另一种更特别?
-
__method
:私有方法。 -
__method__
:特殊的Python方法。 他们这样命名,以防止名称冲突。 查看这个页面,了解这些特殊方法的列表。 -
_method
:这是Python风格指南中受保护方法的推荐命名约定。
从风格指南:
_single_leading_underscore
:弱的“内部使用”指标。 例如from M import *
不导入名称以下划线开头的对象。
single_trailing_underscore_
:single_trailing_underscore_
使用,以避免与Python关键字冲突,例如Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore
:命名一个类属性时,调用名字改变(在类FooBar
,__boo变成_FooBar__boo
;见下文)。
__double_leading_and_trailing_underscore__
:位于用户控制的命名空间中的“魔术”对象或属性。 例如__init__
,__init__
__import__
或__file__
。 不要发明这样的名字; 只有按照logging使用它们。
-
method
只是一个正常的方法 - 除非你知道你在做什么,否则不应该调用
_method
,这通常意味着你自己写了这个方法。 -
__method
2个下划线用于防止名称混搭。 像这样的属性或方法可以通过instance._ClassName__method
方法访问。 虽然很多人称之为“私人”,但事实并非如此 。 你不应该用这个来阻止某人访问这个方法,而是使用_method
。 -
__method__
用于修改实例行为的特殊方法。 不要这样命名你自己的方法。
这些都是公约,所以它们不是强制执行的。 不过,你通常可以期望:
__somename__
在Python语言规范本身定义的东西。 不要在你自己的命名中使用这个。
_somename
这通常应该是通过一些不同的机制而不是直接调用。 类似于在大多数其他语言中声明私有,但不以任何方式强制执行。
__somename
这实在不应该被直接调用,并在内部被打乱,以免意外地阻止你这样做。 如果您确实需要出于某种原因调用它,请查看文档以了解如何操作。
上面的任何一个可以同样适用于函数,variables或类名。
这些方法被命名为减less命名冲突的可能性。
以双下划线开头和前缀的方法通常被标记为表示它们是Python语言规范的一部分。
一些带有双下划线前缀和后缀的方法是特殊的。 例如,只要创build该类的实例,就调用__init__
,而在打印对象时调用__str__
。 基本上可以用特殊的方式来调用。 您可以像使用其他方法一样使用它们,也可以通过与它们关联的特殊方式来调用它们。
我不知道双下划线的全局函数(不属于任何类),但我认为没有任何。
__name__
的模式表示“魔术”方法。 这些被各种function所调用
str(x) -> x.__str__() repr(x) -> x.__repr__() x[0] -> x.__getitem__(0) etc
一个下划线前缀用于表示一个私有属性,并且只通过约定来遵循。
双下划线前缀将启动名称修改,其中名称为__attr的属性在实例化时更改为__Class_attr。
_method__的模式并不真正用于任何事情。