Question about the @staticmethod decorator

Paul Moore p.f.moore at gmail.com
Sun Mar 17 16:24:33 EDT 2019


On Sun, 17 Mar 2019 at 18:18, Arup Rakshit <ar at zeit.io> wrote:
>
> I am reading a book where the author says that:
>
> In principle, it would also be possible to implement any @staticmethod completely outside of the class at module scope without any loss of functionality — so you may want to consider carefully whether a particular function should be a module scope function or a static method. The @staticmethod decorator merely facilitates a particular organisation of the code allowing us to place what could otherwise be free functions within classes.
>
> I didn’t get quiet well this block of text. My first question is how would I make a module level function as static method of a class. Can anyone give me an example of this? What are the contexts that would let you to think if they are good fit inside the class or module level scope functions?

The point the author is trying to make is that there's no practical
difference between

def say_hello(name):
    print("Hello,", name)

and

class Talker:
    @staticmethod
    def say_hello(name):
        print("Hello,", name)

You refer to the first as "say_hello", and the second as
"Talker.say_hello", but otherwise they are used identically. The
static method has no access to the class or instance variables, so it
has no special capabilities that the standalone "say_hello" function
has. So, to rephrase the words you used, @staticmethod lets you
organise your code in a certain way, but doesn't offer any extra
capabilities over module-level functions.

Paul



More information about the Python-list mailing list