我理解以下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中的情况有何不同?
答案 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