程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python魔法方法(6):__str__(self) 方法

編輯:Python

Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。

功能

定義對象被 str()函數調用時的行為, 一般面向程序使用者。

參數

self 代表對象本身。

返回值

必須是字符串,否則拋出異常。

示例

class Point:
def __init__(self, x, y):
self.x = x
self.y = y
if __name__ == "__main__":
p = Point(3, 4)
print(p)

執行結果:

<__main__.Point object at 0x000001FD666F7B50>

這段代碼中定義了一個簡單的類,它當中有 x 和 y 兩個元素,但是如果直接運行的話,屏幕上會輸出一個地址。這個結果是解釋器在執行的時候這個實例的一些相關信息,但幾乎沒有參考意義,我們想要的是這個實例當中具體的值,而不是一個內存當中的地址。

想要實現這個功能,有很多方法,其中之一是__str__。

__str__方法類似於Java當中的toString方法,可以根據需要返回實例轉化成字符串之後的結果。

比如,可以在類當中重載這個方法,就可以根據需要輸出結果了:

class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f'x: {self.x}, y: {self.y}'
if __name__ == "__main__":
p = Point(3, 4)
print(p)

執行結果:

x: 3, y: 4

再看如下示例:

class MyText:
name = 1
# def __repr__(self) -> str:
# return '嗯哼'
def __str__(self):
return 'My is str'
sample = MyText()
print(sample) # My is str
print(str(sample)) # My is str

執行結果:

My is str
My is str

__repr__和__str__方法的總結:

1、如果 __repr__和__str__都沒有被定義, 那麼print(對象),print(str(對象)),print(repr(對象))都會輸出對象的地址。
2、如果只有__repr__被定義,那麼那麼print(對象),print(str(對象)),print(repr(對象))都會輸出該方法的返回值。
3、如果只有__str__被定義,那麼print(對象)和print(str(對象))會輸出該方法的返回值,print(repr(對象))會輸出對象的地址。
4、如果兩個都被定義,那麼print(對象)會輸出__str__方法的返回值,print(str(對象)),print(repr(對象))會輸出各自方法的返回值。
簡單來說,__str__可以被__repr__代替(__str__沒有定義時),反之不行,但__str__的優先級更高。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved