关于python:@staticmethod建议使用简单的类方法

@staticmethod for simple class methods suggested

我最近用Pycharm和Sonarkube来检查我的代码。这两个工具都建议更新很多方法,比如get_success_url,这些方法在其主体中不使用self来使用@staticmethod修饰器。

我完全理解为什么,但我觉得这几乎毫无意义。在性能方面,我不确定这是否有帮助。此外,这些通常被重写的django方法。我能安全地使用这个装饰器吗?或者它是如此毫无意义,不值得花时间更新?


  • 在性能方面,一个简单的例子表明,调用静态方法比调用实例方法(这是您所期望的,因为它不需要传递实例引用)效率稍高:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> 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不是故意在主体中使用的,不是偶然使用的。