我知道方法__repr__
和__str__
的存在是为了给出类实例的正式和非正式表示。但是对于类对象是否也存在等价物,因此当打印类对象时,可以显示它的一个很好的表示?
>>> class Foo:
... def __str__(self):
... return "instance of class Foo"
...
>>> foo = Foo()
>>> print foo
instance of class Foo
>>> print Foo
__main__.Foo
答案 0 :(得分:6)
当您致电print(foo)
时,会调用foo
的{{1}}方法。 __str__
类可以找到__str__
,foo
。
同样,当您致电Foo
时,会调用print(Foo)
的{{1}}方法。 Foo
类可以找到__str__
,通常是__str__
。您可以使用元类更改它:
Foo
答案 1 :(得分:1)
您可以使用元类来执行此操作,但是AFAIK,对于普通类没有通用解决方案。
如果它只是您自己的类,您可以采用包含特定类变量和元数据的编码标准,即:
class Whatever(object):
classAuthor = "me"
classCreated = "now"
或者,如果您使用的是支持类装饰器的python,您可以使用装饰器自动为其添加注释,或强制元数据存在。
但是...... 也许你只想要AClass.__name__
?
答案 2 :(得分:0)
在我看来,你不能为类创建自定义repr
字符串是一件好事;类的关键是创建该类的实例。
答案 3 :(得分:0)
您无法在班级类型上使用__repr__
或__str__
,但可以使用docstring来提供有关班级的信息
>>> class Foo:
... """Foo's description"""
... def __str__(self):
... return "instance of class Foo"
...
>>> foo = Foo()
>>> print foo
instance of class Foo
>>> print Foo.__doc__
Foo's description
>>> Foo.__doc__
"Foo's description"