Это происходит потому, что метод change_name
объявлен как classmethod
. Это означает, что его параметр self
является не объектом (экземпляром класса), а классом, фактически вы должны переименовать cls
, чтобы было понятно.
Назначение переменной tbe через класс создает ее в пространстве имен класса, а не в объекте.
Но при поиске через объект python ищет его в пространстве имен объекта и, если он не может быть найден, он ищет его в классе '(и выше в суперклассах', если он еще не найден)
Так как он вам, кажется, не нужен поскольку атрибут name принадлежит каждому экземпляру монстра, решение состоит в том, чтобы сделать метод простым экземпляром, удалив декоратор @classmethod
.