Python中的静态方法?

发布于 2021-02-02 23:20:34

Python中是否可以有无需初始化类即可调用的静态方法,例如:

ClassName.static_method()
关注者
0
被浏览
154
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    是的,使用staticmethod装饰器

    class MyClass(object):
        @staticmethod
        def the_static_method(x):
            print(x)
    
    MyClass.the_static_method(2)  # outputs 2
    

    请注意,某些代码可能使用旧的方法来定义静态方法,而将其staticmethod用作函数而不是装饰器。仅当你必须支持Python的旧版本(2.2和2.3)时,才应使用此选项。

    class MyClass(object):
        def the_static_method(x):
            print(x)
        the_static_method = staticmethod(the_static_method)
    
    MyClass.the_static_method(2)  # outputs 2
    

    这与第一个示例完全相同(使用@staticmethod),只是不使用漂亮的装饰器语法

    最后,要staticmethod()谨慎使用!在极少数情况下,Python中需要使用静态方法,而我已经看到它们使用过很多次,而使用单独的“顶层”函数会更加清楚。

    以下是文档的逐字记录:

    静态方法不会收到隐式的第一个参数。要声明静态方法,请使用以下惯用法:

    class C:
        @staticmethod
        def f(arg1, arg2, ...): ...
    

    @staticmethod形式是一个函数装饰器 –有关详细信息,请参见函数定义中的函数定义说明。

    可以在类(如C.f())或实例(如C().f())上调用它。该实例除其类外均被忽略。

    Python中的静态方法类似于Java或C ++中的静态方法。有关更高级的概念,请参见classmethod()

    有关静态方法的更多信息,请参阅标准类型层次结构中有关标准类型层次结构的文档。

    2.2版中的新功能。

    在版本2.4中更改:添加了函数装饰器语法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看