定義的方法是`__str__`,為什么用在實(shí)例上時(shí)不用寫(xiě)雙下劃線了?str(bob)
class?Person(object):???? def?__init__(self,?name,?gender):???????? self.name?=?name???????? self.gender?=?gender???? def?__str__(self):???????? return?'name:?{},?gender:?{}'.format(self.name,?self.gender) bob?=?Person('Bob',?'Male') str(bob)?#?==>?'name:?Bob,?gender:?Male'
定義的方法是`__str__`,為什么用在實(shí)例上時(shí)不用寫(xiě)雙下劃線了?
2021-01-17
你這完全搞錯(cuò)了,__str__是object對(duì)象的內(nèi)置函數(shù),而str()是python全局的一個(gè)內(nèi)置函數(shù),這兩個(gè)不是一個(gè)函數(shù)
在使用? ? ?str(a)? ? ?時(shí)等價(jià)于? ? a.__str__()? ? ? ,即str方法會(huì)去調(diào)用對(duì)象的內(nèi)置函數(shù)__str__.
這里你可能會(huì)問(wèn),那為啥不寫(xiě)a.__str__(),而是寫(xiě)成str(a)。因?yàn)榱?xí)慣規(guī)定雙下劃線的為私有級(jí)別,不建議直接調(diào)用,而且個(gè)人覺(jué)得寫(xiě)起來(lái)代碼也不好看
2020-10-28
這沒(méi)啥原理,創(chuàng)始人定的。他開(kāi)頭怎么定,后人跟著怎么走。就像‘’我愛(ài)你‘’為什么代表我愛(ài)你,而不是‘’去吃飯‘’代表我愛(ài)你,都是無(wú)解的。