Как я могу узнать, к какому классу я был вызван из функции @staticmethod в python? - PullRequest
1 голос
/ 04 июля 2011

Когда вызывается статический метод, есть ли способ узнать, из какого подкласса он был вызван?

(я знаю, что это очень не OO и, вероятно, никогда не пригодится в хорошо написанной программе, но я хотел бы знать, предоставляет ли язык это)

Например:

class A(object):
  @staticmethod
  def foo():
    print 'bar'
    # *** I would like to print either 'A' or 'B' here

class B(A):
  pass

A.foo()
B.foo()

1 Ответ

9 голосов
/ 04 июля 2011

Вы должны использовать @classmethod вместо @staticmethod для этого. С помощью метода класса вы получаете ссылку на класс, переданный в качестве первого аргумента:

class A(object):
  @classmethod
  def foo(cls):
    print cls.__name__
    # *** I would like to print either 'A' or 'B' here

class B(A):
  pass

A.foo()
B.foo()

Выход: http://codepad.org/bW3E51r9

A
B

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...