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