我知道方法__repr__和__str__存在,以提供类实例的正式和非正式表示.但是对于类对象是否也存在等价物,因此当打印类对象时,可以显示它的一个很好的表示?
>>> class Foo:
... def __str__(self):
... return "instance of class Foo"
...
>>> foo = Foo()
>>> print foo
instance of class Foo
>>> print Foo
__main__.Foo
最佳答案:
当你调用print(foo)时,会调用foo的__str__方法. __str__在foo类中找到,即Foo.
类似地,当你调用print(Foo)时,会调用Foo的__str__方法. __str__位于Foo类中,通常是类型.您可以使用元类更改它:
class FooType(type):
def __str__(cls):
return 'Me a Foo'
def __repr__(cls):
return '<Foo>'
class Foo(object):
__metaclass__=FooType
def __str__(self):
return "instance of class Foo"
print(Foo)
# Me a Foo
print(repr(Foo))
# <Foo>