課程
/后端開發(fā)
/Python
/Python3 進階教程(新版)
在定義方法時,如果__str__和__repr__方法中定義返回的語句不一樣,在運行之后,print(s)輸出的還是__srt__方法中定義的語句,這是為什么
2021-11-20
源自:Python3 進階教程(新版) 4-2
正在回答
關(guān)于調(diào)用兩種方法的時機
使用print()時
使用%s和f'{}'拼接對象時
f'{}'
使用str(x)轉(zhuǎn)換對象x時
在上述三種場景中,會優(yōu)先調(diào)用對象的__str__()方法;若沒有,就調(diào)用__repr__()方法;若再沒有,則顯示其內(nèi)存地址。
__str__()
__repr__()
特別地,對于下面兩種場景:
用%r進行字符串拼接時
用repr(x)轉(zhuǎn)換對象x時
則會調(diào)用這個對象的__repr__()方法;若沒有,則不再看其是否有__str__()方法,而是顯示其內(nèi)存地址。
class?Person(object): ????def?__init__(self,?name,?gender): ????????self.name?=?name ????????self.gender?=?gender ???????? class?Student(Person):???? ????def?__init__(self,?name,?gender,?score):???????? ????????super(Student,?self).__init__(name,?gender)???????? ????????self.score?=?score??? ???????? ????def?__str__(self):???????? ????????return?'Student:?{},?{},?{}'.format(self.name,?self.gender,?self.score)???? ????def?__repr__(self):???????? ????????return?'STUDENT:?{},?{},?{}'.format(self.name,?self.gender,?self.score) ???????? s?=?Student('Bob',?'Male',?88) print(s) print('%s'?%?s) print('%r'?%?s) print(str(s)) print(repr(s))
舉報
學(xué)習(xí)函數(shù)式、模塊和面向?qū)ο缶幊?,掌握Python高級程序設(shè)計
1 回答既然python都原配__str()__和__repr__()兩種方法了,為啥還要自己在類的下面重新定義一遍__str()__和__repr__()?
1 回答返回函數(shù)中,為什么輸入g()不能調(diào)用g方法,x()就可以呢,還有什么方法,可以調(diào)用g()函數(shù)方法,讓其打印g方法的語句呢
2 回答我在終端輸入這個命令后怎么什么都沒有???似乎是終端無法啟動(windows系統(tǒng)的IDE環(huán)境已經(jīng)配置了),有大佬知道問題在哪兒嗎
2 回答想請教一下參考答案中定義修改set方法,要怎么調(diào)用呢
3 回答關(guān)于多重繼承在子類的__init__方法中到底應(yīng)該調(diào)用哪個父類的__init__
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2021-11-23
關(guān)于調(diào)用兩種方法的時機
使用print()時
使用%s和
f'{}'
拼接對象時使用str(x)轉(zhuǎn)換對象x時
在上述三種場景中,會優(yōu)先調(diào)用對象的
__str__()
方法;若沒有,就調(diào)用__repr__()
方法;若再沒有,則顯示其內(nèi)存地址。特別地,對于下面兩種場景:
用%r進行字符串拼接時
用repr(x)轉(zhuǎn)換對象x時
則會調(diào)用這個對象的
__repr__()
方法;若沒有,則不再看其是否有__str__()
方法,而是顯示其內(nèi)存地址。