Python 区别于__方法;及;方法“;
Python 区别于__方法;及;方法“;,python,methods,Python,Methods,方法与方法与方法之间有什么区别 是否有任何或出于某种随机原因,人们认为\uuu doc\uuu应该是正确的,而不是doc。是什么使一个方法比另一个方法更特殊?以双下划线开头和前缀的方法通常被标记,以表明它们是Python语言规范的一部分。这些方法的命名是为了减少命名冲突的可能性。 \u方法:私有方法 \uuuu方法\uuuu:特殊的Python方法。它们这样命名是为了防止名称冲突 \u method:这是中受保护方法的推荐命名约定 从样式指南中: \u单个\u前导\u下划线:弱“内部使用”指
方法与方法与方法之间有什么区别
是否有任何或出于某种随机原因,人们认为\uuu doc\uuu
应该是正确的,而不是doc
。是什么使一个方法比另一个方法更特殊?以双下划线开头和前缀的方法通常被标记,以表明它们是Python语言规范的一部分。这些方法的命名是为了减少命名冲突的可能性。
\u方法
:私有方法
\uuuu方法\uuuu
:特殊的Python方法。它们这样命名是为了防止名称冲突李>
\u method
:这是中受保护方法的推荐命名约定
从样式指南中:
\u单个\u前导\u下划线
:弱“内部使用”指示器。例如,来自M的
导入*
不导入名称以下划线开头的对象
单尾随下划线:按惯例使用,以避免与
Python关键字,例如
Tkinter.Toplevel(master, class_='ClassName')
\uuuuuuuuuuuuuuuuuuu前导下划线
:命名类属性时,调用name
损坏(在类内FooBar
,\uuuboo变为\ufoobar\uuboo
;见下文)
\uuuuu双\u前导\u和尾随\u下划线\uuuuuuu
:“魔法”对象或
位于用户控制的名称空间中的属性。例如,\uuuuu init\uuuu
,
\uuuu导入\uuuu
或\uuuu文件\uuuu
。永远不要捏造这样的名字;只使用它们
如文件所述
有些带有双下划线前缀和后缀的方法是特殊的。例如,每当创建该类的实例时,就会调用\uuuuuu init\uuuu
,当要打印对象时,就会调用\uuuu str\uuuu
。基本上,它们可以用特殊的方式调用。您可以像使用任何其他方法一样使用它们,也可以通过与它们关联的特殊方式调用它们
我不知道双下划线全局函数(不属于任何类),但我认为没有。这些都是约定,因此无论如何都不会强制执行。不过,您通常可以预期:
__somename__
python语言规范本身中定义的东西。不要在你自己的命名中使用这个
_somename
这通常应该通过一些不同的机制来调用,而不是直接调用。类似于在大多数其他语言中声明私有内容,但不以任何方式强制执行
__somename
这实际上不应该被直接调用,并且在内部被破坏以阻止您意外地这样做。如果您真的因为某种原因需要调用它,请查看文档以了解如何调用
上述任何一项都同样适用于函数、变量或类名。模式\uuuu name\uuuu
表示“神奇”方法。这些函数由各种函数调用,如
str(x) -> x.__str__()
repr(x) -> x.__repr__()
x[0] -> x.__getitem__(0)
etc
单个下划线前缀用于指示私有属性,仅在约定中使用
双下划线前缀启动名称混乱,在实例化时,名为_attr的属性更改为_Class_attr
你的“方法”模式并没有真正用于任何事情。
方法
只是一种普通方法
\u方法
除非您知道自己在做什么,否则不应调用,这通常意味着您自己编写了该方法
\u方法
两个下划线用于防止名称管理。这样的属性或方法可以通过实例进行访问。虽然很多人称之为“私人”,但事实并非如此。您不应使用此方法阻止他人访问此方法,请改用\u方法
\uuuu方法\uuuu
用于修改实例行为的特殊方法。不要这样命名您自己的方法
\uu方法不是真正私有的,它与类名有冲突,但仍然可以正常访问+1尽管如此。@Bastien-谢谢你改进了格式-1.因为_x在面向对象的意义上不是私有的,这不是它的重点。关键是要避免两个类错误地使用相同的属性。它是命名空间处理,而不是私有/受保护。