国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python面向對象程序設計OOP深入分析【構造函數,組合類,工具類等

2020-02-16 00:30:27
字體:
來源:轉載
供稿:網友

本文深入分析了Python面向對象程序設計OOP。分享給大家供大家參考,具體如下:

下面是一個關于OOP的實例,模塊文件為person.py

# File person.py(start)class Person:  def __init__(self, name, job=None, pay=0):    self.name = name    self.job = job    self.pay = pay  def last_name(self):    return self.name.split()[-1]  def give_raise(self, percent):    self.pay = int(self.pay * (1+percent))    print('total percent:%f' % percent)  def __str__(self):    return '[Person: %s, %s]' % (self.name, self.pay)class Manager(Person):  # 這是一種不太好的方法重載的方法,實際應用中我們采用下面的方法  def give_raise(self, percent, bonus=.1):    self.pay = int(self.pay * (1+percent+bonus))  # 這個方法利用了這樣的一個事實:類方法總是可以在一個實例中調用。  # 其實常規的實例調用,也是轉換為類的調用  # instance.method(args...) 由Python自動地轉換為 class.method(instance,args...)  # 所以要記得直接通過類進行調用時,必須手動傳遞實例,這里就是self參數  # 而且不能寫成self.give_raise,這樣會導致循環調用  #  # 那么為什么采用這種形式呢?因為它對未來的代碼的維護意義重大,因為give_raise現在  # 只在一個地方,即Person的方法,將來需要修改的時候,我們只需要修改一個版本  def give_raise(self, percent, bonus=.1):    Person.give_raise(self, percent+bonus)if __name__ == '__main__':  # self-test code  bob = Person('Bob Smith')  sue = Person('Sue Jones', job='dev', pay=100000)  print(bob)  print(sue)  print(bob.last_name(), sue.last_name())  sue.give_raise(.1)  print(sue)  print('-'*20)  tom = Manager('Tom Jones', 'mgr', 50000)  tom.give_raise(.1)  print(tom.last_name())  print(tom)  print('--All three--')  for obj in (bob, sue, tom):    obj.give_raise(.1)    print(obj)

這個示例定義了Person類,并且Person類的構造函數采用了默認關鍵字參數,重載了__str__方法用以print輸出,定義了得到last_name的方法,定義了give_raise漲工資方法。類Manager繼承自Person,Manager重新定義了自己的give_raise方法,獲得額外的bonus=0.1的獎金。

在代碼最后,寫了自測試的代碼if __name__ == '__main__',用以測試。輸出如下:

[Person: Bob Smith, 0]
[Person: Sue Jones, 100000]
Smith Jones
total percent:0.100000
[Person: Sue Jones, 110000]
--------------------
total percent:0.200000
Jones
[Person: Tom Jones, 60000]
--All three--
total percent:0.100000
[Person: Bob Smith, 0]
total percent:0.100000
[Person: Sue Jones, 121000]
total percent:0.200000
[Person: Tom Jones, 72000]

這里也可以給Manager增加自己獨有的方法。

定制構造函數

現在的代碼可以正常工作,但是,如果仔細研究會發現,當我們創建Manager對象的時候,必須為它提供一個mgr工作名稱似乎沒有意義:這已經由類自身暗示了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盖州市| 永清县| 炎陵县| 象州县| 朔州市| 宕昌县| 三穗县| 麻栗坡县| 永丰县| 遵化市| 耿马| 始兴县| 曲周县| 黔江区| 麻栗坡县| 普洱| 渑池县| 绥滨县| 探索| 安塞县| 三穗县| 武乡县| 仙游县| 盐城市| 恭城| 兰州市| 石家庄市| 宁阳县| 清丰县| 林芝县| 延吉市| 红河县| 辽中县| 攀枝花市| 鲁甸县| 青冈县| 朝阳市| 永安市| 陆河县| 庐江县| 利辛县|