Python之面向對象

来源:http://www.cnblogs.com/xiaocheche/archive/2017/10/05/7630286.html
-Advertisement-
Play Games

1》面向對象編程(Object-Oriented Programming): 對於編程語言的初學者而言,OOP不是一個很容易理解的編程方式,OPP的三大特性有繼承,封裝,多態,OOP也使得我們對代碼的修改和擴展變得更容易; 封裝:把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或對 ...


1》面向對象編程(Object-Oriented Programming):
  對於編程語言的初學者而言,OOP不是一個很容易理解的編程方式,OPP的三大特性有繼承,封裝,多態,OOP也使得我們對代碼的修改和擴展變得更容易;
     封裝:把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或對象操作,對不可信的進行信息隱藏;
     繼承:可以使用現有類的所有功能,併在無須重新編寫原來的類的情況下對這些功能進行擴展;一般情況下,一個子類只能有一個基類,要實現多重繼承,                        可以通過多級繼承來實現;繼承概念的實現方式有三類:實現繼承,介面繼承和可視繼承;
      實現繼承:使用基類的屬性和方法而無需額外編碼的能力;
      介面繼承:僅使用屬性和方法的名稱,但是子類必須提供實現的能力;
      可視繼承:子類使用基類的外觀和實現代碼的能力;
      OOP開發範式大致為: 劃分對象->抽象類->將類組織成為層次化結構(繼承和合成)->用類與實例進行設計和實現;
  多態:允許將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運行;簡單的                    說,允許將子類類型的指針賦值給父類類型的指針;
  封裝和繼承是為了代碼重用,而多態則是為了介面重用;
  把一個抽象的類變成一個具體的對象的過程叫實例化;                                          

            1>類和構造方法:

          

        2>類的變數與實例變數:

        

               

                                       

        3>類的繼承:
        class SchoolMember(object):
            membur_nums = 0
        def __init__(self,name,age,sex):
          self.name = name
          self.age = age
          self.sex = sex
          self.enroll()
        def enroll(self):
          SchoolMember.membur_nums +=1
    # print("\033[32:1m The [%s] memburs SchoolMember [%s] is enrolled!\033[0m" %(self.membur_nums,self.name))
          
print("The [%s] memburs SchoolMember [%s] is enrolled!" % (self.membur_nums, self.name))
      def
tell(self):
            print(
"Hello my name is %s" %self.name)
      class
Teacher(SchoolMember):
      
def __init__(self,name,age,sex,course,salary):
        super(Teacher,
self).__init__(name,age,sex)
        
self.course = course
        
self.salary = salary
      
def teaching(self):
        print(
"Teacher [%s] is teaching [%s]" %(self.name,self.course))
      class
Student(SchoolMember):
      
def __init__(self,name,age,sex,course,tuition):
        super(Student,
self).__init__(name,age,sex)
        
self.course = course
        
self.tuition = tuition
      
def pay_tuition(self):
        print(
"cao,student [%s] paying tuition [%s]" %(self.name,self.tuition))
       t1 = Teacher(
"Alex",22,'F',"PY",1000)
     t2 = Teacher(
"Tenglan",25,'N/A',"PY",900)

     s1 = Student(
"SanJiang",24,"Female","python",15000)
     s2 = Student(
"BaoAn",23,"F","python",5000)

       t1.tell()
       t1.teaching()
       s1.tell()
       s1.pay_tuition()

                        

     4>類的靜態方法類方法及屬性:
      ****python不支持多態並且也用不到多態,多態用於java和c#中;
      多態的應用: 

         

        

           類的成員可以分為三大類:欄位,方法和屬性;

          

      1)欄位:欄位包括普通欄位和靜態欄位,他們在定義和使用中有所區別,而最本質的區別是記憶體中保存的位置不同,普通欄位屬於對象,靜態                                欄位屬於類,普通欄位需要通過對象來訪問,靜態欄位通過類訪問;
      靜態欄位在記憶體中只保存一份,普通欄位在每個對象中都要保存一份;
      靜態欄位===類變數,普通欄位====實例變數;
    2)屬性(類方法):其中的裝飾器將方法變為類方法,只能通過類來調用,實例不可以直接調用;
      屬性的基本使用:  

                            

                            

                         類的靜態方法:不能訪問類變數,也不能訪問實例變數;

          

                            類的屬性,將方法變為屬性:

          

                          給屬性設置值:

          

           

            刪除屬性的設置值:

          

       4>新式類和經典類:
      1)多繼承:新式類用廣度優先查找,經典類用深度優先查找(3.0中都是廣度優先);        

          

                      2)類的描述信息:__doc__; 

          

        3)類中實例銷毀:__del__(析構函數),一直將程式執行完之後會執行實例銷毀;

         

        

        4)__dict__ 以字典形式遍歷出類下的所有變數;

         

         5>反射的妙用:

        import sys
        class WebServer(object):
          def __init__(self,host,port):
            self.host = host
            self.port = port

          def start(self):
            print("Server is starting...")
          def
stop(self):
            print("Server is stopping...")
          def
restart(self):
            self.stop()
            self.start()

        def test_run(self,name):
          print("running...",name,self.host)

      if
__name__ =="__main__":
        server = WebServer(
'localhost',333)
        
#print(sys.argv[1])
        
if hasattr(server,sys.argv[1]):
          func = getattr(server,sys.argv[
1]) #獲取server.start記憶體地址
          
func() #server.start()
        # setattr(server,"run",test_run) #類的實例,屬性,方法名
        # server.run(server,"che")

        # delattr(server,"host") #刪除實例中的對象
        # print(server.host)

        
delattr(WebServer,"start") #刪除類中的方法
          
print(server.restart())
        
# cmd_dic = {
            # "start":server.start,
            # "stop":server.stop,
            # "restart":server.restart,
            # }
      #if sys.argv[1] == "start":
      # if sys.argv[1] in cmd_dic:
      # cmd_dic[sys.argv[1]]()
 

                     


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

-Advertisement-
Play Games
更多相關文章
  • 0.目錄 1. "前言" 2. "建立資料庫" 2.1 "通過SSMS建立資料庫" 2.2 "通過SQL語句建立資料庫" 3. "建立表" 3.1 "通過SSMS建立表" 3.2 "通過SQL語句建立表" 1.前言 配置是win10+SQL Server 2012,使用的GUI管理工具是SQL Se ...
  • 說明 本文寫於2017 10 03,使用MySQL 5.7,操作系統為64位 Debian GNU/Linux 8.6 (jessie)。 安裝 因apt倉庫將mysql相關的包移除,需要自己去官網下載之,以及相關的依賴包。 在安裝mysql community server時,會提示輸入MySQL ...
  • 一、基本的sql語句 CRUD操作:create 創建(添加)read 讀取update 修改delete 刪除1、添加數據insert into Info values('p009','張三',1,'n001','2016-8-30 12:9:8') ; 給特定的列添加數據insert into ...
  • httpd使用VirtualHost指令進行虛擬主機的定義。支持三種虛擬主機:基於ip,基於埠和基於名稱。其中基於埠的虛擬主機在httpd的術語上(例如官方手冊)也屬於基於IP的。 當一個請求到達時,將首先匹配虛擬主機。匹配虛擬主機的規則為最佳匹配法。所謂最佳,是指通配的越少,匹配的優先順序越高。 ...
  • 特別在對文件進行執行時,要特別註意做好判斷 -r 文件可以被有效的UID/GID讀取。 -w 文件可以被有效的UID/GID寫入。 -x 文件可以被有效的UID/GID執行。 -o 文件被有效UID所有 -R 文件可以被真實的UID/GID讀取。 -W 文件可以被真實的UID/GID寫入。 -X 文 ...
  • CentOS7 +vsftpd (一)之 匿名 ftp的搭建是一個基礎性的工作,CentOS7 +vsftpd 是一個比較容易實現的平臺,但在搭建中問題會不少,本系列將通過四篇隨筆與大家分享。 一、CentOS7 1、實驗環境為:VMware Workstation Pro +CentOS 7 64 ...
  • 0. 前言 最近新買了一臺小米Air 13.3,除了但鍵盤手感外都比較滿意。我比較喜歡折騰Linux,但又不想放棄原有的Windows 10 Home,於是在原有的windows 10基礎上再安裝了Arch Linux,實現雙系統。本文為安裝過程簡介。由於安裝過程有的地方漏了截圖,這些地方直接使用了 ...
  • [1]虛擬機設置 [2]系統安裝 [3]XShell配置 [4]常見問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...