Подтвердить что ты не робот

В python как получить имя класса внутри его статического метода

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

В следующем примере, что должно быть там вместо XXX в методе my_name()

class snake()
   @staticmethod
   def my_name():  
      print XXX.__name___

class python (snake)
   pass
class cobra (snake)
   pass

python.my_name()
# I want output to be python

cobra.my_name()   
# I want output to be cobra
4b9b3361

Ответ 1

Я уверен, что это невозможно для статического метода. Вместо этого используйте метод класса:

class Snake(object):
    @classmethod
    def my_name(cls):  
        print cls.__name__

Ответ 2

Статический метод в Python для всех целей и задач - только функция. Он ничего не знает о классе, поэтому вы не должны этого делать. Вероятно, это возможно, большинство вещей имеют тенденцию быть. Но это неправильно.:)

И в этом случае вы явно заботитесь о классе, поэтому вам не нужен статический метод. Поэтому используйте метод класса.

Ответ 3

ключевое слово self дает класс с помощью метода в нем. Поэтому имя можно найти, используя self.__name__

Если вы хотите получить родительский класс, вам нужно передать его классу каким-либо методом, например, методом __init__.

class example():
    def __init__(self,parent):
        self.parent = parent

    def printit(self):
        print self.__name__
        print self.parent.__name__

Также вы должны включить self как первый аргумент методов класса. Это соглашение python, которое позволяет вам обращаться к переменным класса с помощью self.

Кроме того, вы должны просто иметь доступ к имени, используя python.__name__