Static methods in Python?

后端 未结 10 927
悲&欢浪女
悲&欢浪女 2020-11-22 02:36

Is it possible to have static methods in Python which I could call without initializing a class, like:

ClassName.static_method()
10条回答
  •  没有蜡笔的小新
    2020-11-22 02:49

    Static methods in Python?

    Is it possible to have static methods in Python so I can call them without initializing a class, like:

    ClassName.StaticMethod()
    

    Yes, static methods can be created like this (although it's a bit more Pythonic to use underscores instead of CamelCase for methods):

    class ClassName(object):
    
        @staticmethod
        def static_method(kwarg1=None):
            '''return a value that is a function of kwarg1'''
    

    The above uses the decorator syntax. This syntax is equivalent to

    class ClassName(object):
    
        def static_method(kwarg1=None):
            '''return a value that is a function of kwarg1'''
    
        static_method = staticmethod(static_method)
    

    This can be used just as you described:

    ClassName.static_method()
    

    A builtin example of a static method is str.maketrans() in Python 3, which was a function in the string module in Python 2.


    Another option that can be used as you describe is the classmethod, the difference is that the classmethod gets the class as an implicit first argument, and if subclassed, then it gets the subclass as the implicit first argument.

    class ClassName(object):
    
        @classmethod
        def class_method(cls, kwarg1=None):
            '''return a value that is a function of the class and kwarg1'''
    

    Note that cls is not a required name for the first argument, but most experienced Python coders will consider it badly done if you use anything else.

    These are typically used as alternative constructors.

    new_instance = ClassName.class_method()
    

    A builtin example is dict.fromkeys():

    new_dict = dict.fromkeys(['key1', 'key2'])
    

提交回复
热议问题