Python 类的表示方法
我知道有两个方法,__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>