Python 类的表示方法

5 投票
4 回答
1783 浏览
提问于 2025-04-16 12:21

我知道有两个方法,__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

在我看来,不能为类自定义repr字符串是一件好事;因为类的主要目的是用来创建这个类的实例。

1

你可能可以通过元类来实现这个,但据我所知,对于普通类来说没有通用的解决办法。

如果只是你自己写的类,你可以制定一个编码标准,要求在类里加一个特定的类变量来存放你的元数据,比如:

class Whatever(object):
    classAuthor = "me"
    classCreated = "now"

或者如果你使用的Python版本支持类装饰器,你可以用装饰器自动为你添加这些信息,或者强制要求这些元数据必须存在。

不过…… 也许你只是想要 AClass.__name__ 呢?

6

当你调用 print(foo) 时,实际上是调用了 foo__str__ 方法。这个 __str__ 方法是在 foo 所属的类里面的,也就是 Foo 类。

同样地,当你调用 print(Foo) 时,Foo__str__ 方法也会被调用。这个 __str__ 方法是在 Foo 类的类里面,通常是 type。不过,你可以通过使用元类来改变这一点:

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>

撰写回答