Python类表示的方法

时间:2011-02-23 01:34:44

标签: python class instance representation

我知道方法__repr____str__的存在是为了给出类实例的正式和非正式表示。但是对于类对象是否也存在等价物,因此当打印类对象时,可以显示它的一个很好的表示?

>>> class Foo:
...     def __str__(self):
...         return "instance of class Foo"
...
>>> foo = Foo()
>>> print foo
instance of class Foo
>>> print Foo
__main__.Foo

4 个答案:

答案 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"