亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中的魔法方法__repr__和__str__用法實(shí)例詳解

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

引言

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

1、__repr__方法

1.1 含義及作用

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

1.2 示例

下面是一個(gè)簡(jiǎn)單的例子,來(lái)說(shuō)明__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)
  
# 這個(gè)例子中定義了`__repr__`方法
# 輸出: Point(x=1, y=2)
print(p)

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

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

2、__str__方法

2.1 含義及作用

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

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

2.2 示例

下面是一個(gè)簡(jiǎn)單的示例,展示了如何定義__str__方法來(lái)描述一個(gè)Person類的對(duì)象:

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)建一個(gè)Person實(shí)例
john = Person('John Doe', 30)

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

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

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

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

3、兩種方法的對(duì)比

兩種方法均由兩個(gè)下劃線開(kāi)頭和結(jié)尾,這樣的命名方式是 Python 用來(lái)標(biāo)識(shí)特殊方法的一種約定。

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

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

下面舉個(gè)例子進(jìn)一步說(shuō)明兩者的不同:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • win10下python3.5.2和tensorflow安裝環(huán)境搭建教程

    win10下python3.5.2和tensorflow安裝環(huán)境搭建教程

    這篇文章主要為大家詳細(xì)介紹了win10下python3.5.2和tensorflow安裝環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python設(shè)計(jì)模式之模板方法模式實(shí)例詳解

    Python設(shè)計(jì)模式之模板方法模式實(shí)例詳解

    這篇文章主要介紹了Python設(shè)計(jì)模式之模板方法模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了模板方法模式的概念、原理及Python定義、使用模板方法模式相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • pandas去除重復(fù)值的實(shí)戰(zhàn)

    pandas去除重復(fù)值的實(shí)戰(zhàn)

    本文主要介紹了pandas去除重復(fù)值的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python刪除文件、清空目錄的實(shí)現(xiàn)方法

    python刪除文件、清空目錄的實(shí)現(xiàn)方法

    這篇文章主要介紹了python刪除文件、清空目錄的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 人工智能學(xué)習(xí)pyTorch的ResNet殘差模塊示例詳解

    人工智能學(xué)習(xí)pyTorch的ResNet殘差模塊示例詳解

    這篇文章主要為大家介紹了人工智能學(xué)習(xí)pyTorch的ResNet殘差模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • conda虛擬環(huán)境使用pip下載包到當(dāng)前環(huán)境的兩種方法

    conda虛擬環(huán)境使用pip下載包到當(dāng)前環(huán)境的兩種方法

    conda管理包很方便,但并不是所有包都有最新的conda版本,所以仍需要使用conda中的pip來(lái)安裝包,下面這篇文章主要給大家介紹了關(guān)于conda虛擬環(huán)境使用pip下載包到當(dāng)前環(huán)境的兩種方法,需要的朋友可以參考下
    2022-08-08
  • Python 中PyQt5 點(diǎn)擊主窗口彈出另一個(gè)窗口的實(shí)現(xiàn)方法

    Python 中PyQt5 點(diǎn)擊主窗口彈出另一個(gè)窗口的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python 中PyQt5 點(diǎn)擊主窗口彈出另一個(gè)窗口的實(shí)現(xiàn)方法,本文代碼實(shí)例圖文相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 使用python生成目錄樹(shù)

    使用python生成目錄樹(shù)

    這篇文章主要為大家詳細(xì)介紹了使用python生成目錄樹(shù)、文件的程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python pandas詳細(xì)用法指南(推薦)

    python pandas詳細(xì)用法指南(推薦)

    這篇文章主要介紹了Python中pandas庫(kù)中Series和DataFrame數(shù)據(jù)結(jié)構(gòu)的基本定義、讀取和保存文件的方法、數(shù)據(jù)的基本操作和數(shù)據(jù)分析技巧,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • 使用python實(shí)現(xiàn)數(shù)組、鏈表、隊(duì)列、棧的方法

    使用python實(shí)現(xiàn)數(shù)組、鏈表、隊(duì)列、棧的方法

    數(shù)據(jù)結(jié)構(gòu)是指相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關(guān)系組成。這篇文章主要介紹了使用python實(shí)現(xiàn)數(shù)組、鏈表、隊(duì)列、棧的相關(guān)知識(shí),需要的朋友可以參考下
    2019-12-12

最新評(píng)論