我如何提供python类(非实例)的非正式字符串表示

ada*_*dam 6 python

我理解如何提供对象实例的非正式表示,但我有兴趣提供类名的非正式字符串表示.

具体来说,我想覆盖打印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)

Jür*_*bel 8

您的问题称为元类混淆.在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__.