定義的方法是`__str__`,為什么用在實例上時不用寫雙下劃線了?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__`,為什么用在實例上時不用寫雙下劃線了?
2021-01-17
你這完全搞錯了,__str__是object對象的內置函數,而str()是python全局的一個內置函數,這兩個不是一個函數
在使用? ? ?str(a)? ? ?時等價于? ? a.__str__()? ? ? ,即str方法會去調用對象的內置函數__str__.
這里你可能會問,那為啥不寫a.__str__(),而是寫成str(a)。因為習慣規定雙下劃線的為私有級別,不建議直接調用,而且個人覺得寫起來代碼也不好看
2020-10-28
這沒啥原理,創始人定的。他開頭怎么定,后人跟著怎么走。就像‘’我愛你‘’為什么代表我愛你,而不是‘’去吃飯‘’代表我愛你,都是無解的。