Python 中 class 的字符串表示 3

String representation of a class in Python 3

我希望我的 classes 有一个基于 class 变量的字符串表示(在派生的 classes 中可能不同)。 This answer 建议 metaclasses 可能是要走的路:

class MC(type):
    def __repr__(self):
        return 'Wahaha!'

class C():
    __metaclass__ = MC

print(C)

但这在Python3中不起作用,返回

<class '__main__.C'>

而不是 Wahaha!。 有人可以向我解释 Python 2 和 3 之间发生了什么变化,以及如何在 Python 3 中进行处理吗?

改变的是在 3.x 中声明元类的方式。

class C(metaclass=MC):
    pass