gpt4 book ai didi

python - Python 中静态方法的语法是如何选择的?

转载 作者:太空狗 更新时间:2023-10-29 17:11:04 27 4
gpt4 key购买 nike

我使用 Python 已经有一段时间了,我发现将方法声明为静态的语法很奇怪。

将声明一个常规方法:

def mymethod(self, params)
...
return

声明了一个静态方法:

def mystaticethod(params)
...
return
mystaticmethod = staticmethod(mystaticmethod)

如果不添加静态方法行,编译器会报错 self missing。

这是一种非常复杂的方式来做一些非常简单的事情,在其他语言中只需使用关键字和声明语法即可。谁能告诉我这种语法的演变过程?这仅仅是因为将类添加到现有语言中吗?

由于我可以将 staticmethod 行移到类后面,这也表明解析器在记账方面格外努力。

请注意,我知道后来添加的装饰器语法,我有兴趣从语言设计的角度了解原始语法是如何产生的。我唯一能想到的是,staticmethod 应用程序调用一个将函数对象转换为静态方法的操作。

最佳答案

静态方法在类出现很久之后就被添加到 Python 中(类很早就添加了,甚至可能在 1.0 之前;静态方法直到 2.0 左右才出现)。它们是作为对普通方法的修改而实现的——您从函数创建静态方法对象以获取静态方法,而编译器默认生成实例方法。

与 Python 中的许多东西一样,引入了静态方法,然后随着人们使用它们并需要更好的语法而对其进行改进。最初的一轮是在不向语言添加新语法的情况下引入语义的一种方式(Python 对语法更改非常有抵抗力)。我不是 Guido,所以我不确定他脑子里在想什么,这有点推测性,但 Python 倾向于缓慢移动,逐步开发,并在他们获得更多经验时完善事物(特别是,他们不喜欢在找到正确的方法之前添加一些东西。这可能就是为什么从一开始就没有针对静态方法的特殊语法的原因)。

不过,正如 mjv 所指出的,现在有一种更简单的方法,通过在 2.2 或 2.3 中添加的一些称为“装饰器”的语法糖:

@staticmethod
def mystaticmethod(params)
...
return

@staticmethod 语法是在方法定义之后放置 mystaticmethod = staticmethod(mystaticmethod) 的糖分。

关于python - Python 中静态方法的语法是如何选择的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1477545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com