久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python筆記70 - Python中__repr__和__str__區(qū)別

 上海悠悠 2021-11-23

前言

Python中__repr____str__使用區(qū)別

__repr__ 使用

很多時(shí)候我們?cè)趧?chuàng)建一個(gè)類的時(shí)候,在終端打印類的實(shí)例,,看到的是一個(gè)類似于這樣的內(nèi)容:<XXX object at 0x0000000001222E10>

class MyDefined(object):

def __init__(self):
self.name = "yoyo"

在終端調(diào)試結(jié)果

>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<a.MyDefined object at 0x0000015EEEB1F0B8>
>>>

返回的是對(duì)象的內(nèi)存地址,,對(duì)于初學(xué)者看起來(lái)很不友善,,初學(xué)者無(wú)法理解返回的內(nèi)容,于是可以加一個(gè)__repr__ 方法

class MyDefined(object):

def __init__(self):
self.name = "yoyo"

def __repr__(self):
return '<object MyDefined: {}>'.format(self.name)

重新在終端調(diào)試

>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<object MyDefined: yoyo>
>>> print(yo)
<object MyDefined: yoyo>

從打印的結(jié)果就可以看到返回的是<object MyDefined: yoyo>,這樣用戶就知道返回的是什么實(shí)例對(duì)象,,便于開發(fā)者理解,。
__repr__是直接輸出對(duì)象(面向開發(fā)者),,方便提供接口給開發(fā)者使用,,如django里面的ORM查詢,返回queryset對(duì)象,。

__str__ 使用

__str__方法是在print()打印的時(shí)候輸出給用戶看的,,面向的是普通的用戶,方便用戶知道返回的是什么實(shí)例對(duì)象,。

class MyDefined(object):

def __init__(self):
self.name = "yoyo"

def __str__(self):
return '<object MyDefined: {}>'.format(self.name)

在終端調(diào)試

>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<a.MyDefined object at 0x000001A4C133F128>
>>> print(yo)
<object MyDefined: yoyo>
>>>

從結(jié)果可以看到直接輸入yo,,返回的還是object at 0x000,只有print()輸出的時(shí)候才會(huì)打印__str__返回的內(nèi)容

總結(jié)

注意:__str__()方法和__repr__()方法的返回值只能是字符串!
__repr____str__這兩個(gè)方法都是用于顯示的,,__str__是面向用戶的,,而__repr__面向開發(fā)者

關(guān)于調(diào)用兩種方法的時(shí)機(jī)

  • 使用print()時(shí)

  • 使用%s和f’{}’拼接對(duì)象時(shí)

  • 使用str(x)轉(zhuǎn)換對(duì)象x時(shí)
    在上述三種場(chǎng)景中,會(huì)優(yōu)先調(diào)用對(duì)象的__str__()方法,;若沒(méi)有,,就調(diào)用__repr__()方法;若再?zèng)]有,,則顯示其內(nèi)存地址,。

特別地,對(duì)于下面兩種場(chǎng)景:

  • 用%r進(jìn)行字符串拼接時(shí)

  • 用repr(x)轉(zhuǎn)換對(duì)象x時(shí)
    則會(huì)調(diào)用這個(gè)對(duì)象的__repr__()方法,;若沒(méi)有,,則不再看其是否有__str__()方法,而是顯示其內(nèi)存地址,。

當(dāng)我們想在不同環(huán)境下支持不同的顯示,,例如終端用戶顯示使用__str__,而程序員在開發(fā)期間則使用底層的__repr__來(lái)顯示,,實(shí)際上__str__只是覆蓋了__repr__以得到更友好的用戶顯示,。

參考博客https://www.cnblogs.com/zyyhxbs/p/11184094.html
參考博客https://blog.csdn.net/nanhuaibeian/article/details/86694581

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多