object類有一個__str__()
方法,用於返回一個"對象的描述",對應於內置函數str()
,常常用於print()
方法,幫助咱們查看對象的信息。
由於__str__()
默認在object類中定義,因此子類能夠重寫這個方法。 python
不一樣語言中對應的不一樣的方法名:git
__str__()
方法toString()
方法__toString()
方法__str__()
默認定義在類object
當中。github
def __str__(self, *args, **kwargs): # real signature unknown """ Return str(self). """ pass
示例代碼:markdown
class Student(object): pass class Person(object): def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "名字:{0},年齡:{1}".format(self.name, self.age) s1 = Student() print(s1) print("--" * 20) p1 = Person("聶發俊", 100) print(p1)
運行結果:ide
<__main__.Student object at 0x0000015E99B5F3C8> ---------------------------------------- 名字:聶發俊,年齡:100
程序說明:函數
__str__()
也直接沿用,因此打印內容格式以下:<模塊名.類名 被繼承類名 at 內存地址>
的格式__str__()
,屬於子類重寫父類方法,採用子類的__str__()
方法,因此執行打印的時候,輸出:名字:聶發俊,年齡:100
.__str__
和__repr__
區別str()
函數和__str__
在平常的開發看的不少,可是可能不多人會注意__repr__
,這兩個很接近,可是有一些細微的差異。
相同點: 兩個都是打印輸出功能的函數
不一樣點: __str__
是面向用戶顯示的,在IDE和命令行都出現,很常見。__repr__
是面向程序顯示,只出如今命令行,不多見。
示例代碼:命令行
>>> class Person: ... def __init__(self, name, age): ... self.name = name ... self.age = age ... def __str__(self): ... return "__str__:{0},{1}".format(self.name, self.age) ... def __repr__(self): ... return "__repr__:{0},{1}".format(self.name, self.age) ... >>> p1 = Person("niefajun", 100) >>> p1 __repr__:niefajun,100 >>> print(p1) __str__:niefajun,100
程序說明:code
Person
,包含兩個實例屬性name
和age
,另外重寫了__str__(self)
和__repr__(self)
兩個方法,而且實例化對象p1>>> p1
的時候,因爲在命令行環境,這個時候會執行__repr__(self)
,完成打印功能,因此顯示:__repr__:niefajun,100
,而當使用print(p1)
至關因而給用戶看的,會調用__str__(self)
方法,因此輸出:__str__:niefajun,100
。
注意:
在python文件中使用的都是__str__
備註:
更多精彩博客,請訪問: 聶發俊的技術博客
對應視頻教程,請訪問: python400
完整markdown筆記,請訪問: python400_learn_github