我理解如何提供对象实例的非正式表示,但我有兴趣提供类名的非正式字符串表示.
具体来说,我想覆盖打印Class时返回的内容(__main __.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.
Run Code Online (Sandbox Code Playgroud)
您的问题称为元类混淆.在A类中,如果A.__str__(self)是A实例方法的模板,我该如何__str__()为A本身提供方法?元课程来救援.
以下链接比我在这里更好地解释了这一点.
http://gnosis.cx/publish/programming/metaclass_1.html
http://gnosis.cx/publish/programming/metaclass_2.html
这是一个简短的例子:
class AMeta(type):
def __str__(self):
return "I am the truly remarkable class A"
class A(object):
__metaclass__ = AMeta
def __str__(self):
return "I am an A instance"
print A
I am the truly remarkable class A
print A()
I am an A instance
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你可以做同样的事情__repr__.