@staticmethod建议使用简单的类方法

时间:2015-10-09 09:44:10

标签: python django

我最近使用pycharm和sonarqube来查看我的代码。这两个工具都建议更新许多方法,例如get_success_url在其正文中未使用self来使用@staticmethod装饰器。

我完全明白为什么,但我觉得这几乎毫无意义。关于表现,我不确定它会有所帮助。而且,这些经常被覆盖的django方法。我可以安全地使用那个装饰器吗或它没有多大意义,不值得花时间更新?

1 个答案:

答案 0 :(得分:2)

  • 就性能而言,一个简单的例子表明,调用静态方法比调用实例方法(您预期的方法)稍微有效,因为它不必传递实例参考文献):

    >>> 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并非故意在机构内使用。{{1}}。