#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