定義的方法是`__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
這沒啥原理,創始人定的。他開頭怎么定,后人跟著怎么走。就像‘’我愛你‘’為什么代表我愛你,而不是‘’去吃飯‘’代表我愛你,都是無解的。