Как указать строковое представление для класса

#python

#python

Вопрос:

Предположим, у меня есть:

 class A:

  @classmethod
  def __str__(cls): return 'A'
  

Намерение состоит в том, чтобы str(A) возвращать 'A' .

Но вместо этого я получаю <class '__main__.A'> .

То же самое происходит, когда я определяю __repr__ .

Как я могу определить строковое представление для класса?

Мне нужно что-то, на что будет реагировать str(A) поскольку у меня нет контроля над вызовом.

Комментарии:

1. __str__ и __repr__ ищутся по типу рассматриваемого объекта. Если рассматриваемый объект является классом, то его типом является его метакласс.

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

3. Вам нужно написать пользовательский метакласс.

Ответ №1:

Вы можете использовать метакласс, который переопределяет __str__ метод базового класса объекта класса, type :

 class meta(type):
    def __str__(cls):
        return cls.__name__

class A(metaclass=meta):
    pass

print(str(A))
  

Это выводит:

 A