1. 程式人生 > >python 的print和特殊方法 __str__和__repr__

python 的print和特殊方法 __str__和__repr__

repr 顯式 type 例如 print python python2 bject acl

先提出一個疑問,為什麽print函數可以直接打印參數呢?即使是數字?例如print 1,就會打印1。我們知道1的類型是整型(題外話,在python中1是常量,也是類int的對象,而java中1只是常量),按理說print接受的參數應該是字符串啊?

回答:

因為print函數會首先調用str()函數將參數轉化為str類型,而str()函數會調用這個參數所屬類中的__str__方法,這個方法定義在object類中。我們知道一切類都是這個object類的子類(在python3中是,即使在定義類的時候沒有顯式繼承object類,默認也是object的子類。但是在python2中卻不是,python2中定義類的時候如果沒有繼承object,則不是object的子類,在pythn2中這種沒繼承object的類叫做經典類,而繼承了object的類叫做新式類。而python3卻都是新式類,因為所有的類都是object的子類),子類繼承父類方法,但是我們可以重寫這個__str__方法。例如:

class M(type):
def __init__(self):
pass
def __str__(self):
return "gege"
class TM(object):
pass
__metaclass__ = M
print (TM.__class__)
a = M()
print a

python 的print和特殊方法 __str__和__repr__