我了解如何提供对象的实例的非正式表示,但我对提供类名的非正式字符串表示感兴趣。在
因此,具体来说,我想重写打印类(优main_uu.SomeClass)时返回的内容。在
>>> class SomeClass:
... def __str__(self):
... return 'I am a SomeClass instance.'
...
>>> SomeClass
<class __main__.SomeClass at 0x2ba2f0fd3b30>
>>> print SomeClass
__main__.SomeClass
>>>
>>> x = SomeClass()
>>> x
<__main__.SomeClass instance at 0x2ba2f0ff3f38>
>>> print x
I am a SomeClass instance.
要更改类的字符串表示形式:
工作正常。在
如果在定义
__str__
时调用了repr(Test)
,它将不会使用您的托管消息。在但是,如果您像我一样定义}没有在{}中定义。在
__repr__
,并且调用了str(Test)
,它将使用您的托管消息,因为__repr__
是后备,而{如果您只想更改它的名称:
^{pr2}$都会改变类名。在
您必须重写元类的
__str__
方法。我真的不知道你为什么要这么做,但不管怎样,它就在这里。在你的问题被称为元类混淆。对于类A,如果
A.__str__(self)
是A实例的方法的模板,那么如何为A本身提供方法__str__()
?拯救元类。在下面的链接比我在这里解释得更好。在
http://gnosis.cx/publish/programming/metaclass_1.html
http://gnosis.cx/publish/programming/metaclass_2.html
这里有一个简短的例子:
顺便说一下,
__repr__
也可以这样做。在相关问题 更多 >
编程相关推荐