面向對象2

来源:http://www.cnblogs.com/flags-blog/archive/2017/11/19/7861867.html
-Advertisement-
Play Games

類的繼承 上面代碼中yello_person繼承了person父類。 子類中構造函數先對父類的構造函數進行繼承;然後加上自己的特有屬性。 18,19行示例如何使用對象分別調用父類和子類的方法 上面代碼中6行示例如何在構造函數中操作公有屬性,實現類似全局計數功能。 10行定義的方法示例如何在父類中列印 ...


類的繼承

 1 class person(object):
 2     def __init__(self,name,age):
 3         self.name = name
 4         self.age = age
 5 
 6     def info(self):
 7         print("the person's name is %s age is %d"%(self.name, self.age))
 8 
 9 class yello_person(person):  #繼承person類
10     def __init__(self, name, age, level):
11         person.__init__(self, name, age)  #構造函數先繼承父類,自己再增加屬性參數
12         self.level = level
13 
14     def show_level(self):
15         print("the person %s level is %d"%(self.name, self.level))
16 
17 y1 = yello_person('zsq', 28, 15)
18 y1.info()  #使用繼承父類的方法
19 y1.show_level()  #使用子類自己的方法

上面代碼中yello_person繼承了person父類。

子類中構造函數先對父類的構造函數進行繼承;然後加上自己的特有屬性。

18,19行示例如何使用對象分別調用父類和子類的方法

 1 class SchoolMember(object):
 2     Member = 0
 3     def __init__(self, name, age):
 4         self.name = name
 5         self.age = age
 6         SchoolMember.regist(self)  #構造函數中直接調用註冊方法,給成員數量加1
 7     def regist(self):
 8         SchoolMember.Member += 1  #操作公有屬性
 9 
10     def display(self):  #列印對象所有屬性的方法
11         print('%s info is--'%self.name)
12         for k,v in self.__dict__.items():
13             print('\t', k, '\t',v)
14         print('end ---')
15 
16     def __del__(self):  #析構函數,在手動刪除某個對象時會對該對象執行。或者整個程式結束時會對所有對象執行,此程式會在程式末尾列印。
17         print('開除了%s'%self.name)
18 
19 class Teacher(SchoolMember):
20     '''
21     定義Teacher子類,在初始化時自動完成註冊功能。在繼承父類基礎上增加自己的屬性以及方法
22     '''
23     def __init__(self, name, age, salay, course):
24         SchoolMember.__init__(self, name, age)
25         self.salary = salay
26         self.couesr = course
27     def teaching(self):
28         print("%s teaching %s"%(self.name, self.couesr))
29 
30 class Student(SchoolMember):
31     def __init__(self, name, age, tuition ):
32         SchoolMember.__init__(self, name, age)
33         self.tuition = tuition
34     def tuition(self):
35         print('%s pay money %d for study'%(self.name, self.tuition))
36 
37 
38 t1 = Teacher('zsq', 28, 15000, "cloud_compute")
39 t1.teaching() #調用子類方法
40 t1.display() #調用父類方法
41 print(SchoolMember.Member) #列印學校成員,在對象初始化時自動加1

 

上面代碼中6行示例如何在構造函數中操作公有屬性,實現類似全局計數功能。

10行定義的方法示例如何在父類中列印對象的所有屬性

 

多態

統一的調用介面,對不同對象有不同的處理邏輯。

 1 class Animal(object):
 2     def talk(self):
 3         print('this is father class')
 4 
 5 class Dog(Animal):
 6     def talk(self):
 7         print("旺旺旺")
 8 
 9 class Cat(Animal):
10     def talk(self):
11         print("喵喵喵")
12 
13 d1 = Dog()
14 c1 = Cat()
15 def animal_talk(obj):   #當前實現統一介面調用不同對象產生不同效果,即多態。可以使用示例函數作為過渡方案
16     obj.talk()   #此處obj為具體的對象,調用對象的talk方法。即子類中重構以後的方法,來實現多態。
17 animal_talk(d1)
18 animal_talk(c1)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 學習了一下 AI 五子棋,順手改作 19 路的棋盤,便於圍棋通用。render.py 主要修改如下: 2. 發現 pygame 還不錯,便從網上搜索到《Beginning Game Development With Python And Pygame》,其中螞蟻游戲的 AI 表現甚好,主要代碼 ...
  • 前言 本篇將結合JDK1.6的TreeMap源碼,來一起探索紅-黑樹的奧秘。紅黑樹是解決二叉搜索樹的非平衡問題。 當插入(或者刪除)一個新節點時,為了使樹保持平衡,必須遵循一定的規則,這個規則就是紅-黑規則: 1) 每個節點不是紅色的就是黑色的 2) 根總是黑色的 3) 如果節點是紅色的,則它的子節 ...
  • 本文主要給大家分享使用matlab編寫代碼,完成課程設計、畢業設計或者研究項目時,matlab調試程式的技巧和方法。 快速完成一個項目,最簡單的方法就是利用前人的開源代碼,然後根據自己項目的具體需求和參數,對已有代碼進行調試,並增加或刪減部分功能,最終實現自己項目的全部功能。所謂“站在前人的肩膀上... ...
  • Joinpoint 連接點 Pointcut 切入點 Advice 通知/增強 舉例: Aspact 切麵 比如給add()增加日誌功能的過程即稱為切麵 還有幾個術語知道就可以,不常用 Introduction (引入)使用動態的方法在原有屬性基礎上 添加新屬性的操作 ...
  • 前言: 之前寫Java服務端處理POST請求時遇到了請求體轉換成字元流所用編碼來源的疑惑,在doPost方法里通過request.getReader()獲取的BufferedReader對象內部的 Reader用的是什麼編碼將位元組流轉換成字元流的呢?又是在哪裡設置呢和什麼時候生效的呢?通過查找資料, ...
  • 作者:NiceCui 本文謝絕轉載,如需轉載需徵得作者本人同意,謝謝。 本文鏈接:http://www.cnblogs.com/NiceCui/p/7862377.html 郵箱:[email protected] 日期:2017-11-19 Python學習二:詞典基礎詳解 (學習不要求多,小計劃 ...
  • 流程式控制制 與C語言不通的是python的流程式控制制代碼塊不是用{}花括弧表示的,而是強制縮進來控制的;而且縮進必須一致,官方推薦是使用4個空格,不建議使用tab(製表符)做縮進,一是不同的系統tab所占寬度不一致,會比較亂,二是由於python要求同級縮進必須保持一致,所以有些時候看上去是對齊l,但是 ...
  • Composer是一個非常流行的PHP包依賴管理工具,已經取代PEAR包管理器,對於PHP開發者來說掌握Composer是必須的. 對於使用者來說Composer非常的簡單,通過簡單的一條命令將需要的代碼包下載到vendor目錄下,然後開發者就可以引入包並使用了.其中的關鍵在於你項目定義的compo ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...