__str__, __repr__ 是python类中的两个魔术方法,前者是在类实例当作字符串时调用,后者通常给程序员调试信息时给输出,都可以直接显示类信息。__repr__ = __str__,简单来说,就是将用__str__方法覆盖__repr__方法,即调试信息与字符输出信息一样。
class Test:
def __init__(self, n, a):
self._n = n
self._a = a
@property
def n(self):
return self._n
#使用 __str__和 __repr__任一都可以实现类信息显示
def __str__(self):
#self._a为%d或者%s无影响
return '%s: %s '% (self._n, self._a)
# def __repr__(self):
# return '%s %s'% (self._n, self._a)
def main():
t = Test('al', 20)
print(t)
if __name__ == '__main__':
main()
特例(同时需要__str__和__repr__才能打印出类信息 ):假设print(t)的每个成员是card,最后就是调用card的repr,调用顺序print(t)调用t.str(),t.str() = t.repr(), t.repr循环调用成员card.repr()。
class Card(object):
"""一张牌"""
def __init__(self, suite, face):
self._suite = suite
self._face = face
@property
def face(self):
return self._face
@property
def suite(self):
return self._suite
def __str__(self):
if self._face == 1:
face_str = 'A'
elif self._face == 11:
face_str = 'J'
elif self._face == 12:
face_str = 'Q'
elif self._face == 13:
face_str = 'K'
else:
face_str = str(self._face)
return '%s %s' % (self._suite, self._face)
# __repr__ = __str__
def __repr__(self):
return self.__str__()
def main():
t = [Card(suite, face)
for suite in '♠♥♣♦'
for face in range(1, 14)]
print(t)
if __name__ =='__main__':
main()