1、__str__(self):
為內置函數,這個方法只能返回str,并且只能有self這一個參數,其他的,自行發揮。
用法:
不使用此方法時,代碼會出現以下結果:
class Friend():
def __init__(self, name):
self.name = name
if __name__ == '__main__':
friend = Friend('Liang')
print friend
那么在申明一個實例對象friend并打印其信息時,python返回的是它的存儲地址
<__main__ .Friend instance at 0x7ff3596c>
使用該方法的時候,會出現以下結果:
class Friend():
def __init__(self, name):
self.name = name
def __str__(self):
return "Friend : %s" % self.name
if __name__ == '__main__':
friend = Friend('Liang')
print friend
此時,打印出的內容為:
Friend name : Liang
2、子類與父類函數重載時,即子類中有一個函數名與父類相同,但是傳入的參數個數不同時,在創建了子類對象之后,調用該函數,傳入的參數只能與子類中參數個數一致,不能跳過子類,通過修改參數的個數與父類相同來直接調用父類。
原始代碼如下所示:
class Person(): ?#父類
def __init__(self,name,job = None,pay = 0):
self.name = name
self.job = job
self.pay = pay
def lastName(self):
return(self.name.split()[-1])
def giveRaise(self,percent):
self.pay = int(self.pay * (1 + percent))
def __str__(self): ? #此方法可通過打印對象名將其對應內容顯示出來而不是打印該對象的存儲地址
return '[Person: %s %s]' % (self.name,self.pay)
class Manager(Person): #子類
def giveRaise(self,percent,bonus = 0.1): #與父類函數名相同,參數個數不同的函數,且該函數為在原來的函數基礎上略做修改,以便函數的維護,因為如果以后要改變工資漲幅的形式,則只需要修改父類的此函數,而不需要兩個函數都要修改。
Person.giveRaise(self, percent + bonus)
if __name__ == '__main__':
bob = Person('bob smith')
sue = Person('sue jones',job = 'dev',pay = 10000)
print (bob.lastName(),bob.name,bob.pay)
sue.giveRaise(0.1)
print(sue.lastName(),sue.name,sue.pay)
print(bob) #因有__str__(self)方法,故能直接打印出bob這個對象的名字和工資,而不是打印bob對象的存儲地址
print(sue)
tom = Manager('tom',job = 'mar',pay = 50000)
print(tom.name,tom.pay)
tom.giveRaise(0.1)#參數個數與子類相同
print (tom.pay)
print(tom)