最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的魔法方法__repr__和__str__用法實例詳解

 更新時間:2025年02月15日 14:13:33   作者:gemingxuan  
這篇文章主要介紹了Python中的__repr__和__str__方法,它們分別用于提供對象的官方字符串表示和用戶友好的字符串表示,通過重寫這兩個方法,可以自定義對象的打印輸出,文中通過代碼將用法介紹的非常詳細,需要的朋友可以參考下

引言

當(dāng)我們直接打印一個python類對象時,得到的通常是類似“<main.ClassName object at 0xmemory_address>”這樣一段字符,無法獲得對象的具體狀態(tài)。這個時候我們就可以重新定義/重寫對應(yīng)類的魔術(shù)方法__repr____str__,使得我們在打印對象時能夠獲得對象的當(dāng)前狀態(tài)信息。

1、__repr__方法

1.1 含義及作用

在Python中,__repr__方法是一種特殊的方法,全稱為 “representation”,即“表示”或“表達”。這個方法用于返回一個對象的“官方”字符串表示形式,主要用于調(diào)試和開發(fā)目的,使得開發(fā)者可以清楚地看到對象的狀態(tài)。

1.2 示例

下面是一個簡單的例子,來說明__repr__的使用方法:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f'Point(x={self.x}, y={self.y})'

p = Point(1, 2)
  
# 這個例子中定義了`__repr__`方法
# 輸出: Point(x=1, y=2)
print(p)

# 如果沒有定義`__repr__`方法,
# 輸出可能為:<__main__.Point object at 0x7fecf006e978>

在這個例子中,Point類定義了一個__repr__方法,當(dāng)對象p被打印時,就會輸出Point(x=1, y=2),這樣就清楚的展示了點的位置信息。

2、__str__方法

2.1 含義及作用

在Python中,__str__方法也是一種特殊的方法(也稱為魔術(shù)方法),它定義了如何對對象轉(zhuǎn)換為用戶友好的字符串表示形式。當(dāng)對象被打印(傳遞給print()函數(shù))或者被轉(zhuǎn)換成字符串類型時(比如使用str(obj)),Python解釋器會嘗試調(diào)用該對象的__str__方法。

__str__方法為對象提供了一個簡潔、易讀的字符串表示,對用戶十分友好,以便于開發(fā)者和終端用戶了解對象的實時狀態(tài),通常用于調(diào)試和日志記錄。

2.2 示例

下面是一個簡單的示例,展示了如何定義__str__方法來描述一個Person類的對象:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name} is {self.age} years old."
    
# 創(chuàng)建一個Person實例
john = Person('John Doe', 30)

# 打印這個Person實例
print(john)  # 輸出: John Doe is 30 years old.

# 將對象轉(zhuǎn)換為字符串
person_str = str(john)
print(person_str)  # 輸出: John Doe is 30 years old.

在這個例子中,__str__ 方法返回了一個格式化的字符串,描述了 Person 對象的名字和年齡。當(dāng)我們將 john 對象打印或轉(zhuǎn)換為字符串時,__str__ 方法就會被自動調(diào)用,從而返回我們定義的描述性字符串。

如果一個類沒有定義__str__方法,Python解釋器會調(diào)用內(nèi)置的__repr__方法來獲取對象的字符串表示。如果也沒有定義__repr__方法,Python解釋器會使用默認的字符串表示形式,即返回對象在計算機內(nèi)存中的實際地址。

3、兩種方法的對比

兩種方法均由兩個下劃線開頭和結(jié)尾,這樣的命名方式是 Python 用來標識特殊方法的一種約定。

__repr__(representation):主要目的是為解釋器和開發(fā)者提供對象的詳細信息,它應(yīng)該返回一個包含創(chuàng)建此對象所需的所有信息的字符串,理想情況下,該字符串可以用python代碼重新創(chuàng)建對象。

__str__(stringification):主要目的是為對象提供人性化的字符串表示,便于開發(fā)者和用戶理解對象的狀態(tài),它的結(jié)果應(yīng)該簡潔直觀,易于閱讀。

下面舉個例子進一步說明兩者的不同:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        # 返回一個可以直接被eval()執(zhí)行的字符串
        return f"Person('{self.name}', {self.age})"

    def __str__(self):
        return f"{self.name} is {self.age} years old."

# 創(chuàng)建一個Person實例
john = Person('John Doe', 30)

# 使用repr函數(shù)顯示對象的官方字符串表示
print(repr(john))  # 輸出: Person('John Doe', 30)

# 使用eval()函數(shù)根據(jù)`__repr__`提供的字符串重新創(chuàng)建對象
new_john = eval(repr(john))

# 檢查新對象是否與原對象具有相同的屬性值
print(new_john)  # 輸出: John Doe is 30 years old.
print(new_john.name, new_john.age)  # 輸出: John Doe 30

在這個例子中,__repr__方法提供了一個可以用來重新創(chuàng)建Person對象的字符串,該字符串可以通過eval()函數(shù)來執(zhí)行,從而創(chuàng)建一個新的Person實例。而__str__方法則為Person對象提供了一種人性化的描述。

總的來說,__repr__方法的目的是盡可能準確地表示對象的狀態(tài),以便于開發(fā)人員準確了解對象的內(nèi)部數(shù)據(jù)。與之相對,__str__方法則偏向于面向用戶的友好展示。在實際編程中,推薦同時定義這兩個方法,以確保對象在所有的上下文中都能得到合適的字符串表示。

區(qū)別小結(jié):

__repr__和__str__這兩個方法都是用于顯示的,__str__是面向用戶的,而__repr__面向程序員。

  • 打印操作會首先嘗試__str__和str內(nèi)置函數(shù)(print運行的內(nèi)部等價形式),它通常應(yīng)該返回一個友好的顯示。

  • __repr__用于所有其他的環(huán)境中:用于交互模式下提示回應(yīng)以及repr函數(shù),如果沒有使用__str__,會使用print和str。它通常應(yīng)該返回一個編碼字符串,可以用來重新創(chuàng)建對象,或者給開發(fā)者詳細的顯示。

當(dāng)我們想所有環(huán)境下都統(tǒng)一顯示的話,可以重構(gòu)__repr__方法;當(dāng)我們想在不同環(huán)境下支持不同的顯示,例如終端用戶顯示使用__str__,而程序員在開發(fā)期間則使用底層的__repr__來顯示,實際上__str__只是覆蓋了__repr__以得到更友好的用戶顯示。

總結(jié)

到此這篇關(guān)于Python中魔法方法__repr__和__str__用法的文章就介紹到這了,更多相關(guān)Python魔法方法__repr__和__str__內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用pandas批量處理矢量化字符串的實例講解

    使用pandas批量處理矢量化字符串的實例講解

    今天小編就為大家分享一篇使用pandas批量處理矢量化字符串的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python多線程編程(七):使用Condition實現(xiàn)復(fù)雜同步

    Python多線程編程(七):使用Condition實現(xiàn)復(fù)雜同步

    這篇文章主要介紹了Python多線程編程(七):使用Condition實現(xiàn)復(fù)雜同步,本文講解通過很著名的“生產(chǎn)者-消費者”模型來來演示在Python中使用Condition實現(xiàn)復(fù)雜同步,需要的朋友可以參考下
    2015-04-04
  • python GUI框架pyqt5 對圖片進行流式布局的方法(瀑布流flowlayout)

    python GUI框架pyqt5 對圖片進行流式布局的方法(瀑布流flowlayout)

    這篇文章主要介紹了python GUI框架pyqt5 對圖片進行流式布局的方法(瀑布流flowlayout),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python Coroutine池化的實現(xiàn)詳解

    Python Coroutine池化的實現(xiàn)詳解

    在當(dāng)今計算機科學(xué)和軟件工程的領(lǐng)域中,池化技術(shù)如線程池、連接池和對象池等已經(jīng)成為優(yōu)化資源利用率和提高軟件性能的重要工具,所以下面我們就來看看Coroutine池化的具體實現(xiàn)吧
    2024-01-01
  • Python人工智能深度學(xué)習(xí)RNN模型結(jié)構(gòu)流程

    Python人工智能深度學(xué)習(xí)RNN模型結(jié)構(gòu)流程

    這篇文章主要為大家介紹了Python人工智能深度學(xué)習(xí)RNN的模型流程結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Python根據(jù)給定模型計算權(quán)值

    Python根據(jù)給定模型計算權(quán)值

    在機器學(xué)習(xí)和深度學(xué)習(xí)中,模型的權(quán)值(或參數(shù))通常是通過訓(xùn)練過程(如梯度下降)來學(xué)習(xí)和調(diào)整的,本文將使用TensorFlow和PyTorch根據(jù)給定模型計算權(quán)值,感興趣的可以了解下
    2024-11-11
  • Python Requests爬蟲之求取關(guān)鍵詞頁面詳解

    Python Requests爬蟲之求取關(guān)鍵詞頁面詳解

    這篇文章主要為大家詳細介紹了Python Requests爬蟲之求取關(guān)鍵詞頁面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Python環(huán)境搭建之OpenCV的步驟方法

    Python環(huán)境搭建之OpenCV的步驟方法

    本篇文章主要介紹了Python環(huán)境搭建之OpenCV的步驟方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • python把一個字符串切開的實例方法

    python把一個字符串切開的實例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python把一個字符串切開的實例方法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-09-09
  • Python中的列表生成式與生成器學(xué)習(xí)教程

    Python中的列表生成式與生成器學(xué)習(xí)教程

    這篇文章主要介紹了Python中的列表生成式與生成器學(xué)習(xí)教程,Python中的Generator生成器比列表生成式功能更為強大,需要的朋友可以參考下
    2016-03-03

最新評論

永和县| 林甸县| 白河县| 南溪县| 高碑店市| 天等县| 富平县| 福海县| 清丰县| 宾阳县| 百色市| 开平市| 沙洋县| 桐庐县| 临朐县| 新建县| 江源县| 景谷| 图片| 米泉市| 紫阳县| 仲巴县| 白水县| 南召县| 卓资县| 个旧市| 红原县| 启东市| 霍州市| 巫溪县| 奈曼旗| 黄平县| 怀远县| 麟游县| 平阳县| 新乐市| 罗定市| 天气| 奉节县| 上杭县| 望谟县|