国产探花免费观看_亚洲丰满少妇自慰呻吟_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工作名稱似乎沒有意義:這已經由類自身暗示了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇坪县| 吉林省| 蓬安县| 酉阳| 临城县| 沅陵县| 平昌县| 双鸭山市| 霍邱县| 晋宁县| 宜宾县| 项城市| 长葛市| 白水县| 景泰县| 林甸县| 昌邑市| 乌兰察布市| 当阳市| 宁国市| 兴和县| 罗江县| 扎赉特旗| 绥芬河市| 东海县| 兴山县| 大石桥市| 泸西县| 新竹县| 河津市| 永吉县| 故城县| 桦川县| 达拉特旗| 宁波市| 舟曲县| 绥棱县| 平阳县| 确山县| 西充县| 湘乡市|