python 改變物件的描述資訊

2021-10-05 20:51:09 字數 3069 閱讀 7781

# -*- coding=utf-8 -*-

class

hello

:def

__init__

(self)

:print

("initialize a object!"

)if __name__ ==

"__main__"

: hello = hello(

)print

(hello)

執行結果:

initialize a object!

<__main__.hello object at 0x000002e14cbd95c8>

如果我想改變hello物件的顯示輸出,讓他更具可讀性,或者新增一些資訊來簡化除錯,該怎麼做呢?

可以重新定義它的 __str__()方法和__repr__()方法。

使用__repr__()方法:

# -*- coding=utf-8 -*-

class

hello

:def

__init__

(self)

:print

("initialize a object!"

)def

__repr__

(self)

:return

"hello 類的例項"

if __name__ ==

"__main__"

: hello = hello(

)print

(hello)

執行結果:

initialize a object!

hello 類的例項

使用__str__()方法:

# -*- coding=utf-8 -*-

class

hello

:def

__init__

(self)

:print

("initialize a object!"

)def

__str__

(self)

:return

"hello 類的例項"

if __name__ ==

"__main__"

: hello = hello(

)print

(hello)

執行結果:

initialize a object!

hello 類的例項

從上面的使用中,貌似__str__()和__repr__()沒有什麼區別,不,其實是有區別的。

# -*- coding=utf-8 -*-

class

hello

:def

__init__

(self)

:print

("initialize a object!"

)def

__str__

(self)

:return

"__str__:hello 類的例項"

def__repr__

(self)

:return

"__repr__:hello 類的例項"

if __name__ ==

"__main__"

: hello = hello(

)print

(hello)

執行結果:

initialize a object!

__str__:hello 類的例項

如果同時出現__str__()和__repr__()方法,優先使用__str__()方法。

如果沒有定義__str__(),會使用__repr__()來代替輸出;

如果__repr__()也沒有定義,看到的就是預設的物件資訊:<main.hello object at 0x000002e14cbd95c8>。

當然,在兩種方法都有定義的情況下,可以使用==!r==格式化**來指定使用__repr__()輸出,替換掉預設的__str__()方法。

# -*- coding=utf-8 -*-

class

hello

:def

__init__

(self)

:print

("initialize a object!"

)def

__str__

(self)

:return

"__str__:hello 類的例項"

def__repr__

(self)

:return

"__repr__:hello 類的例項"

if __name__ ==

"__main__"

: hello = hello(

)print(""

.format

(hello)

)# 這裡使用!r格式化**指定用__repr__()輸出物件資訊

執行結果:

initialize a object!

__repr__:hello 類的例項

自定義__str__()和__repr__()方法是個好習慣,他可以簡化除錯和例項輸出。

上面的輸出只是驗證用的,真實的輸出資訊應該更有用些,比如:

f =

open

("game.py"

)print

(f)

執行結果:

遵循規範,我們給輸出資訊最好也要加上 < 和 > 。

息應該更有用些,比如:

f =

open

("game.py"

)print

(f)

執行結果:

遵循規範,我們給輸出資訊最好也要加上 < 和 > 。

python 獲取物件資訊

判斷物件型別,使用type 函式 判斷乙個物件是否是函式 使用types模組中定義的常量 import types type abs types.builtinfunctiontype true type lambda x x types.lambdatype true type x for x i...

python檢視物件的方法 獲取物件資訊

當我們拿到乙個物件的引用時,如何知道這個物件是什麼型別 有哪些方法呢?使用type 首先,我們來判斷物件型別,使用type 函式 基本型別都可以用type 判斷 type 123 type str type none 如果乙個變數指向函式或者類,也可以用type 判斷 type abs type a...

python 獲取物件資訊的方法

1 type 返回對應的class型別 例如 type 123 type 456 true type 123 int true type abc type 123 true type abc str true type abc type 123 false 2 isinstance 對於class的...