Python:__str__,但对于一个类,而不是一个实例?

时间:2012-02-09 15:05:05

标签: python string class

我理解以下Python代码:

>>> class A(object):
...     def __str__(self):
...         return "An instance of the class A"
... 
>>> 
>>> a = A()
>>> print a
An instance of the class A

现在,我想改变

的输出
>>> print A
<class '__main__.A'>

我需要重载哪个功能才能做到这一点?即使从未实例化类,解决方案也必须工作。 Python 2.x和3中的情况有何不同?

2 个答案:

答案 0 :(得分:11)

在元类上定义__str__()

class A(object):
    class __metaclass__(type):
        def __str__(self):
            return "plonk"

现在,print A将打印plonk

编辑:正如jsbueno在评论中所述,在Python 3.x中,您需要执行以下操作:

class Meta(type):
    def __str__(self):
        return "plonk"
class A(metaclass=Meta):
    pass

即使在Python 2.x中,最好在类体外定义元类 - 我选择上面的嵌套形式来保存一些输入。

答案 1 :(得分:6)

在元类上定义__repr__方法:

class MetaClass(type):

    def __repr__(self):
          return "Customized string"

class TestClass(object):
   __metaclass__  = MetaClass


print TestClass # Customized string