【发布时间】:2011-11-15 22:23:41
【问题描述】:
在 Python 中,object 类充当所有(新式)类的根超类。至少默认情况下,将str 和repr 应用于object 的任何子类的“类实例”会产生相同的结果:
>>> class spam(object): pass
...
>>> str(spam)
"<class '__main__.spam'>"
>>> str(spam) == repr(spam)
我想定义一个object 的子类,比如fancyobject,它在各方面都与object 相同,除了将str 和repr 应用于fancyobject 本身会产生不同的输出:
>>> class ham(fancyobject): pass
...
>>> str(ham)
'ham'
>>> repr(ham)
"<class '__main__.ham'>"
有没有办法在 Python 中做到这一点?
PS:我知道__str__ 特殊方法,但我的理解是如果类A 覆盖__str__,那么只有在@ 的实例上调用str 时才会调用覆盖方法987654337@,而不是在 A 本身上调用它时。即:
>>> class A(object):
... def __str__(self):
... return 'from new __str__: ' + object.__str__(self)
...
>>> str(A())
'from new __str__: <__main__.A object at 0x7f79c62a5310>'
>>> str(A)
"<class '__main__.A'>"
【问题讨论】:
标签: python