|
|
1
12
在类被添加很久之后,静态方法就被添加到Python中(类很早就被添加了,甚至可能在1.0之前;静态方法直到2.0版才出现。它们是作为普通方法的修改实现的——您可以从函数创建一个静态方法对象来获得一个静态方法,而编译器默认生成实例方法。 与Python中的许多东西一样,静态方法也被引入,然后随着人们使用它们并希望获得更好的语法而被细化。第一轮是在不向语言中添加新语法的情况下引入语义的一种方式(Python非常抵制语法更改)。我不是Guido,所以我不确定他脑子里到底在想什么,这有点推测性,但是Python倾向于缓慢地移动,增量地开发,并随着他们获得更多的经验而细化(特别是,在找到正确的方法之前,他们不喜欢添加东西)。这可能就是为什么从一开始就没有针对静态方法的特殊语法)。 不过,正如mjv所指出的,现在有一种更简单的方法,通过在2.2或2.3中添加一些语法sugar,称为“decorators”:
|
|
|
2
11
voyager和adurdin在解释发生了什么方面做得很好:随着Python 2.2中引入了新样式的类和描述符,出现了新的深层语义可能性——最明显有用的示例(静态方法、类方法、属性)由内置描述符类型支持
没有任何新语法
(语法)
voyager在这一点上的观察提醒了他C语言是正确的:我早就宣称Python比任何模仿C语言的语言捕捉到更多的“C精神” of C(如果/while后面的大括号、括号等)。”“C”的精神实际上在ISO C标准的(非规范性)基本原理部分进行了描述,包括五项原则(无需括号!)其中我声称Python与4.5相匹配(如果你好奇的话,我在网上有几个关于“程序员用Python”的演示视频,我会在这里介绍这一点)。
|
|
|
3
4
python中的静态方法可以追溯到Python2.2中引入所谓的新样式类。在此之前,类上的方法只是普通函数,存储为类上的属性:
在Python2.2中,类系统的大部分被重新思考并重新设计为继承自
描述符使使用单个API实现类属性(如属性、类方法和静态方法)的复杂行为成为可能。例如
将其与普通方法的假设纯python描述符进行比较,普通方法默认用于classes属性中的所有普通函数(从实例进行方法查找时,情况并非如此,但它确实处理自动“self”参数):
如果为了恢复原来的函数你需要做很多工作,那么你是对的。但是,由于正常的方法调用是默认情况,静态方法和类方法需要单独实现,描述符提供了一种方法,可以通过一个简单的API实现这些和其他复杂行为。 正如其他人已经指出的,Python2.4中引入的decorator语法为声明静态方法提供了一种更方便的方法,但它只是一种语法上的方便,并不会改变静态方法的工作方式。 看见 http://www.python.org/doc/2.2.3/whatsnew/sect-rellinks.html http://users.rcn.com/python/download/Descriptor.htm |
|
|
4
3
you could already do it
(有一个
如果你阅读政治公众人物,你可以看到所有关于添加内容的讨论。一、 首先,像这样的方法。它使我想起
当新的修饰符语法添加到Python2.4中时,您可以使用具有更干净语法的现有修饰符。 无论如何,如果你必须维护一个旧的系统,它们也没什么不同。
我建议您在静态方法中添加注释或docstring 尖叫 这是一种静态方法。 |
|
|
5
2
Python中的静态方法情况是设计决策的直接结果 first-class everything 和 everything is an executable statement |
|
|
6
2
从Python2.4开始,还可以使用 decorator
但是,对于这个特性的起源,我没有任何见解,因为它是在语言中实现的。但是,再一次,我不是荷兰人:-)请看Michael E在这篇文章中的回应,关于Python进化中静态方法的出现较晚。
@MyDeco someObject is merely "syntactic sugar" for MyDeco(someObject) 装饰师可以用来做很多其他很酷的事情! |
|
|
7
1
Guido写博客 The History of Python . 我认为有一种方法可以联系他,要求他就这个特定的话题展开讨论。 |
|
8
0
也许,设计最初并不认为在可以使用函数时需要静态方法。因为python没有数据隐藏,所以实际上不需要静态方法,而不用类作为名称空间。 |