If I define:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
Is it possible for a function call Foo.bar() to determine the class name Foo?
Замените статический метод на метод класса. Это будет передано классу при его вызове, поэтому вы можете получить имя класса из этого.
class Bar(object):
@classmethod
def bar(cls):
# code
print cls.__name__
class Foo(Bar):
# code
pass
>>> Bar.bar()
Bar
>>> Foo.bar()
Foo
Если вам нужно найти информацию о классе, лучше всего использовать @classmethod
.
class Bar(object):
@classmethod
def bar(cls):
# code
print(cls.__name__)
class Foo(Bar):
# code
pass
Теперь ваш метод bar
имеет ссылку на класс как cls
, который является фактическим классом вызывающего объекта. И, как показано в коде, cls.__name__
— это имя класса, который вы ищете.
>>> Foo.bar()
Foo
>>> Bar.bar()
Bar