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

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


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


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


As option, if you need determine class from staticmethod (not classmethod) I guess following code could be helpful:

class Bar(object):    @staticmethod    def bar():        passclass Foo(Bar):    passfoo_instance = Foo()bar_static_function = foo_instance.barclass_name = bar_static_function.__qualname__.split(".")[0]print(class_name)  # Foo