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

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

stack

Explorer
Ask stack
50 Visits
0 Followers
0 Questions
Home/ stack/Answers
  • About
  • Questions
  • Answers
  • Best Answers
  • Posts
  • Polls
  • Asked Questions
  • Followed
  • Favorites
  • Comments
  • Followers Questions
  • Followers Answers
  • Followers Posts
  • Followers Comments
  1. Asked: January 5, 2020In: Python

    Difference between staticmethod and classmethod in python ?

    stack
    Best Answer
    stack Explorer
    Added 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 statRead more

    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

    See less
      • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp

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.