課程
/后端開發
/Python
/Python3 進階教程(新版)
在定義方法時,如果__str__和__repr__方法中定義返回的語句不一樣,在運行之后,print(s)輸出的還是__srt__方法中定義的語句,這是為什么
2021-11-20
源自:Python3 進階教程(新版) 4-2
正在回答
關于調用兩種方法的時機
使用print()時
使用%s和f'{}'拼接對象時
f'{}'
使用str(x)轉換對象x時
在上述三種場景中,會優先調用對象的__str__()方法;若沒有,就調用__repr__()方法;若再沒有,則顯示其內存地址。
__str__()
__repr__()
特別地,對于下面兩種場景:
用%r進行字符串拼接時
用repr(x)轉換對象x時
則會調用這個對象的__repr__()方法;若沒有,則不再看其是否有__str__()方法,而是顯示其內存地址。
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))
舉報
學習函數式、模塊和面向對象編程,掌握Python高級程序設計
1 回答既然python都原配__str()__和__repr__()兩種方法了,為啥還要自己在類的下面重新定義一遍__str()__和__repr__()?
1 回答返回函數中,為什么輸入g()不能調用g方法,x()就可以呢,還有什么方法,可以調用g()函數方法,讓其打印g方法的語句呢
2 回答我在終端輸入這個命令后怎么什么都沒有???似乎是終端無法啟動(windows系統的IDE環境已經配置了),有大佬知道問題在哪兒嗎
2 回答想請教一下參考答案中定義修改set方法,要怎么調用呢
2 回答這兩節課的內容一般用在什么地方?怎么感覺似懂非懂
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2021-11-23
關于調用兩種方法的時機
使用print()時
使用%s和
f'{}'
拼接對象時使用str(x)轉換對象x時
在上述三種場景中,會優先調用對象的
__str__()
方法;若沒有,就調用__repr__()
方法;若再沒有,則顯示其內存地址。特別地,對于下面兩種場景:
用%r進行字符串拼接時
用repr(x)轉換對象x時
則會調用這個對象的
__repr__()
方法;若沒有,則不再看其是否有__str__()
方法,而是顯示其內存地址。