@简单类方法的staticmethod

2024-04-25 11:50:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近使用pycharm和sonarqube来检查我的代码。这两个工具都建议更新许多方法,例如get_success_url,这些方法没有在它们的主体中使用self,而是使用@staticmethod装饰器。你知道吗

我完全明白为什么,但我觉得这几乎是毫无意义的。关于性能,我不确定它是否会有帮助。此外,这些方法通常被django方法覆盖。我能安全地使用那个装饰器吗?或者它毫无意义,不值得花时间去更新?你知道吗


Tags: 工具django方法代码selfurlget装饰
1条回答
网友
1楼 · 发布于 2024-04-25 11:50:05
  • 就性能而言,一个简单的示例表明,调用静态方法比调用实例方法(这是您所期望的,因为它不必传递实例引用)稍微高效一些:

    >>> class Test(object):
        def method(self):
            pass
        @staticmethod
        def static_method():
            pass
    
    
    >>> import timeit
    >>> setup = 'from __main__ import Test;t = Test()'
    >>> timeit.timeit('t.method()', setup=setup)
    0.1694500121891134
    >>> timeit.timeit('t.static_method()', setup=setup)
    0.14622945482461702
    
  • 在安全性方面,假设您的方法实际上没有引用实例(或重写的方法实现),切换到@staticmethod将不会有什么区别。

  • 就可读性而言,它告诉查看代码的人您实际上已经考虑了设计,并且self不是有意在正文中使用的,不是偶然使用的。

相关问题 更多 >