Sign Up

Sign Up to our social questions and Answers to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In
Continue with Google
or use


Have an account? Sign In Now

Sign In

Login to our social questions & Answers to ask questions, answer people’s questions & connect with other people.

Sign Up Here
Continue with Google
or use

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Continue with Google
or use

Forgot Password?

Need An Account, Sign Up Here

Sorry, you do not have permission to add post.

Continue with Google
or use

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Oraask Logo Oraask Logo
Sign InSign Up

Oraask

  • Write
    • Add A New Post
    • Ask A Question

Oraask Navigation

Search
Ask A Question

Mobile menu

Close
Ask A Question
  • Categories
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Dev Tools
    • Online Compiler
    • Base64 Converter
    • Oraask XML Formatter
    • Oraask JSON Formatter
  • Wiki
    • SQL Tutorials
    • Java Tutorials
    • Python Tutorials
    • JavaScript Tutorials
Home/ Questions/Q 30725
Next
Answered

Oraask Latest Questions

Question
stack
  • 1
  • 1
stackExplorer
Asked: January 5, 20202020-01-05T13:48:32+03:00 2020-01-05T13:48:32+03:00In: Python

Difference between staticmethod and classmethod in python ?

  • 1
  • 1

What is the difference between a function decorated with @staticmethod and one decorated with @classmethod?

source: stackoverflow
author: Daryl Spitzer

classmethodpythonstaticmethod
1
  • 1 1 Answer
  • 415 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook

    Related Questions

    • How to Resolve Permission denied error when installing matplotlib
    • How can we slice a list in Python
    • What is the best way to split a string in Python
    • How do I convert string to datetime in Python
    • How do we convert byte to string in Python

    1 Answer

    • Voted
    • Oldest
    • Recent
    1. stack
      Best Answer
      stack Explorer
      2020-01-05T13:55:29+03:00Added an answer on January 5, 2020 at 1:55 pm

      Maybe a bit of example code will help: Notice the difference in the call signatures of foo, class_foo and static_foo:

      class A(object):
          def foo(self, x):
              print "executing foo(%s, %s)" % (self, x)
      
          @classmethod
          def class_foo(cls, x):
              print "executing class_foo(%s, %s)" % (cls, x)
      
          @staticmethod
          def static_foo(x):
              print "executing static_foo(%s)" % x    
      
      a = A()

      Below is the usual way an object instance calls a method. The object instance, a, is implicitly passed as the first argument.

      a.foo(1)
      # executing foo(<__main__.A object at 0xb7dbef0c>,1)

      With classmethods, the class of the object instance is implicitly passed as the first argument instead of self.

      a.class_foo(1)
      # executing class_foo(<class '__main__.A'>,1)

      You can also call class_foo using the class. In fact, if you define something to be a classmethod, it is probably because you intend to call it from the class rather than from a class instance. A.foo(1) would have raised a TypeError, but A.class_foo(1) works just fine:

      A.class_foo(1)
      # executing class_foo(<class '__main__.A'>,1)

      One use people have found for class methods is to create inheritable alternative constructors.
      With staticmethods, neither self (the object instance) nor cls (the class) is implicitly passed as the first argument. They behave like plain functions except that you can call them from an instance or the class:

      a.static_foo(1)
      # executing static_foo(1)
      
      A.static_foo('hi')
      # executing static_foo(hi)

      Staticmethods are used to group functions which have some logical connection with a class to the class.
      foo is just a function, but when you call a.foo you don’t just get the function, you get a “partially applied” version of the function with the object instance a bound as the first argument to the function. foo expects 2 arguments, while a.foo only expects 1 argument.
      a is bound to foo. That is what is meant by the term “bound” below:

      print(a.foo)
      # <bound method A.foo of <__main__.A object at 0xb7d52f0c>>

      With a.class_foo, a is not bound to class_foo, rather the class A is bound to class_foo.

      print(a.class_foo)
      # <bound method type.class_foo of <class '__main__.A'>>

      Here, with a staticmethod, even though it is a method, a.static_foo just returns a good ‘ole function with no arguments bound. static_foo expects 1 argument, and a.static_foo expects 1 argument too.

      print(a.static_foo)
      # <function static_foo at 0xb7d479cc>

      And of course the same thing happens when you call static_foo with the class A instead.

      print(A.static_foo)
      # <function static_foo at 0xb7d479cc>

       
      source: stackoverflow
      author: unutbu

        • 0
      • Reply
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp

    Leave an answer
    Cancel reply

    You must login to add an answer.

    Continue with Google
    or use

    Forgot Password?

    Need An Account, Sign Up Here
    Continue with Google

    Sidebar

    Adv 250x250

    Explore

    • Categories
    • Questions
      • New Questions
      • Trending Questions
      • Must read Questions
      • Hot Questions
    • Dev Tools
      • Online Compiler
      • Base64 Converter
      • Oraask XML Formatter
      • Oraask JSON Formatter
    • Wiki
      • SQL Tutorials
      • Java Tutorials
      • Python Tutorials
      • JavaScript Tutorials

    Footer

    Oraask

    About

    Oraask is a website for developers and software engineers who want to learn new skills, share their knowledge, and solve their coding problems. Oraask provides free content on various programming languages and topics, such as Oracle, Python, Java, etc. Oraask also allows users to ask questions and get answers from other members of the community.

    About Us

    • About Us
    • Contact Us

    Legal Stuff

    • Privacy Policy
    • Terms & Conditions

    Follow

    Oraask is licensed under CC BY-NC-SA 4.0Oraask CopyrightOraask CopyrightOraask CopyrightOraask Copyright

    © 2019 Oraask. All Rights Reserved
    With Love by Oraask.

    Insert/edit link

    Enter the destination URL

    Or link to existing content

      No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.