“__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__的模式并不真正用于任何事情。