How to get (sub)class name from a static method in Python?

后端 未结 2 900
情深已故
情深已故 2020-12-11 00:09

If I define:

class Bar(object):

    @staticmethod
    def bar():
        # code
        pass

class Foo(Bar):
    # code
    pass

Is it po

相关标签:
2条回答
  • 2020-12-11 00:15

    Replace the staticmethod with a classmethod. This will be passed the class when it is called, so you can get the class name from that.

    class Bar(object):
    
        @classmethod
        def bar(cls):
            # code
            print cls.__name__
    
    class Foo(Bar):
        # code
        pass
    
    >>> Bar.bar()
    Bar
    
    >>> Foo.bar()
    Foo
    
    0 讨论(0)
  • 2020-12-11 00:37

    If you need to find the class information, the appropriate way is to use @classmethod.

    class Bar(object):
        @classmethod
        def bar(cls):
            # code
            print(cls.__name__)
    
    class Foo(Bar):
        # code
        pass
    

    Now your bar method has a reference to the class as cls which is the actual class of the caller. And as shown in the code, cls.__name__ is the name of the class you are looking for.

    >>> Foo.bar()
    Foo
    >>> Bar.bar()
    Bar
    
    0 讨论(0)
提交回复
热议问题