Python 使用静态方法的优点是什么?

Python 使用静态方法的优点是什么?,python,Python,我的意思是,如果普通方法可以做完全相同的事情,那么使用静态方法有什么意义呢? 例如: class test(): _数字=0 def更改(编号): 测试编号=编号 静态变更=静态方法(变更) 测试变更(10) 打印(测试编号) 测试静态变化(10) 打印(测试编号) 我想这是为了防止在从实例而不是从类本身调用函数时出现错误 像这样: x = test() test.change(10) #gives error test.static_change(10) #doesn't give erro

我的意思是,如果普通方法可以做完全相同的事情,那么使用静态方法有什么意义呢? 例如:

class test():
_数字=0
def更改(编号):
测试编号=编号
静态变更=静态方法(变更)
测试变更(10)
打印(测试编号)
测试静态变化(10)
打印(测试编号)
我想这是为了防止在从实例而不是从类本身调用函数时出现错误

像这样:

x = test()
test.change(10) #gives error
test.static_change(10) #doesn't give error

如果您不明确需要静态方法,或者不在需要这种严格分离的项目中,请不要使用它们

在上面的例子中,您的“非静态”方法是错误的:当用作实例方法时,常规方法将始终接收类的实例-如果从实例发出调用,则调用将中断

因此,如果您需要一个只根据输入参数计算某些内容的方法,不需要对类的任何引用,也不需要对实例的引用,那么它应该是一个静态方法

现在,即使它们不需要引用实例和类,但通常会从实例调用,它们也可以是常规方法(使用未使用的
self
第一个参数)

此外,您还应该注意是否值得将可调用函数作为静态方法编写,它是否适合分组,或者它是否应该只是一个常规函数。由于静态方法无法检索其相关的类或实例,因此它们始终可以编写为普通的模块级函数。将then作为静态方法(唯一的原因是出于分组目的——一种使用实例中典型值的计算,但应该作为参数而不是实例属性传递)更有意义的情况实际上很少见


TL;DR:除非您确切地知道自己在做什么,并且使用静态方法更有意义,否则您不应该在Python代码中使用静态方法。

您没有义务编写静态方法。我记不起有哪一次我想使用它们。你可以在本例中的“无用”一词中找到一些关于它们的用途和有用性的讨论。:-)(此外,在此处发布代码时,请注意缩进。使用“格式”按钮或三重后引号分隔代码。原始文章的缩进错误,这是无效的。)。