我的Python分析成長之路7

来源:https://www.cnblogs.com/Ezhizen/archive/2019/01/12/10257544.html
-Advertisement-
Play Games

類 一、編程範式: 1.函數式編程 def 2.面向過程編程 (Procedural Programming) 基本設計思路就是程式一開始是要著手解決一個大的問題,然後把一個大問題分解成很多個小問題或子過程,這些子過程再執行的過程再繼 續分解直到小問題足夠簡單到可以在一個小步驟範圍內解決。 3.面向 ...


一、編程範式:

       1.函數式編程   def

      2.面向過程編程   (Procedural Programming)

        基本設計思路就是程式一開始是要著手解決一個大的問題,然後把一個大問題分解成很多個小問題或子過程,這些子過程再執行的過程再繼        續分解直到小問題足夠簡單到可以在一個小步驟範圍內解決。

      3.面向對象編程 (object oriented programming)

         OOP編程是利用“類”和“對象”來創建各種模型來實現對真實世界的描述,使用面向對象編程的原因一方面是因為它可以使程式的維護和擴         展變得更簡單,並且可以大大提高程式開發效率 ,另外,基於面向對象的程式可以使它人更加容易理解你的代碼邏                   輯,從而使團隊開發變得更從容。

      

 1 #面向對象編程
 2 class Dog():
 3     '''一次小狗的簡單模擬類'''
 4     def __init__(self,name,age):
 5         self.name = name
 6         self.age = age
 7     def eating(self,food):
 8         '''模擬小狗吃東西'''
 9         print("%s is eating %s"%(self.name,food))
10     def running(self):
11         '''模擬小狗跑步'''
12         print("%s is running "%self.name)
13     def main(self):
14         self.eating("apple")
15         self.running()
16 if __name__ == "__main__":
17     dog1 = Dog("xiaoming",3)
18     dog1.main()
View Code

      1.方法__init__():初始化函數,每當實例化類時,python就會自動運行該函數。調用該函數時,會自動傳遞實參self,它是一個指向實例本身的引用,讓實例能訪問類中的       屬性和方法.__init__()函數中需要的參數,就是實例化類時需要傳遞的參數

      2. 其他方法:通過實例來調用該方法 

      3.類屬性和實例屬性 調用時用.調用  類方法也通過.來調用

      

      

      

      

 1 class Car():
 2     name = "Ryoma"
 3     '''一次汽車的簡單模擬類'''
 4     def __init__(self,make,model,year):
 5         '''汽車的屬性'''
 6         self.make = make
 7         self.model = model
 8         self.year = year
 9         self.odometer_ing = 0
10     def get_describe(self):
11         '''車的描述'''
12         print(str(self.make)+' '+str(self.model)+' '+str(self.year))
13     def read_odometer(self):
14         '''讀里程錶'''
15         print("this car has "+str(self.odometer_ing)+' '+"miles ")
16     def update_odometer(self,miles):
17         '''更新里程錶的數'''
18         self.odometer_ing += miles
19 car = Car("AUDI",'A6',1995)
20 car.update_odometer(100)
21 print(car.odometer_ing)
22 car.read_odometer()
View Code

二、類的三大特性

        1.封裝

            封裝也就是把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或對象操作,對不可信的進行信息隱藏

        2.繼承

            繼承是指這樣一種能力,它可以使用現有類的所有功能,併在無需重新編寫原來類的情況下對這些功能進行擴展。

            通過繼承創建的類為“子類”或“派生類”。被繼承的類稱為“父類”或“基類”。

            繼承實現的方式主要有兩種:實現繼承、介面繼承。實現繼承指的是使用基類的屬性或方法而無需額外的編碼能力。介面繼承指使用屬性和方法的名稱,            但是子類必須提供實現的能力(即重構父類的方法)

            

 1 class Car():
 2     def __init__(self,make,model,year,fill_gas=100):
 3         '''汽車的屬性'''
 4         self.make = make
 5         self.model = model
 6         self.year = year
 7         self.odometer_ing = 0
 8         self.fill_gas = 100
 9     def get_describe(self):
10         '''車的描述'''
11         print(str(self.make)+' '+str(self.model)+' '+str(self.year))
12     def read_odometer(self):
13         '''讀里程錶'''
14         print("this car has "+str(self.odometer_ing)+' '+"miles ")
15     def update_odometer(self,miles):
16         '''更新里程錶的數'''
17         self.odometer_ing += miles
18     def fill_gas_tank(self):
19         print("this var has %s "%self.fill_gas)
20 class ElectricCar(Car):
21     '''創建一個電動車的模擬類'''
22     def __init__(self,make,model,year):
23         super(ElectricCar,self).__init__(make,model,year)
24         self.battery = Battery()
25     def fill_gas_tank(self):
26         print("this car has no fill_gas")
27 class Battery():
28     '''一次對電池的簡單模擬'''
29     def __init__(self,battery_size=70):
30         self.battery_size = battery_size
31     def describe_battery(self):
32         print("this battery size is %s"%self.battery_size)
33 ecar = ElectricCar('tesla','s',2000)
34 ecar.battery.describe_battery()
View Code
 1 class Company():
 2     def __init__(self,name,addr,found_year):
 3         self.name = name
 4         self.addr = addr
 5         self.found_year = found_year
 6     def tell(self):
 7         print("公司名為%s,地址是%s,成立於%s"%(self.name,self.addr,self.found_year))
 8     def roll_member(self):
 9         print("\033[31;1m%s正在招人才,大家可以投簡歷\033[0m"%self.name)
10 class CompanyMember():
11     members =0
12     def __init__(self,name,age):
13         self.name = name
14         self.age = age
15     def roll_member(self):
16         CompanyMember.members += 1
17         print("\033[41;1m %s 已被錄用,現在公司人數為%s\00[0m"%(self.name,self.members))
18 class Leader(CompanyMember):
19     def __init__(self,name,age,salary):
20         super(Leader,self).__init__(name,age)
21         self.salary = salary
22         self.roll_member()
23     def job(self):
24         print("%s的工作是CEO"%self.name)
25     def tell_info(self):
26         print("my name is %s,age is %s"%(self.name,self.age))
27 class Putonh(CompanyMember):
28     def __init__(self,name,age):
29        super(Putonh,self).__init__(name,age)
30        self.roll_member()
31     def tell_info(self):
32         print("my name is %s,age is %s"%(self.name,self.age))
33 if __name__ == "__main__":
34     company = Company("Ryoma Fintech","hangzhou",2020)
35     company.tell()
36     company.roll_member()
37     led = Leader('zqq',24,200000)
38     led.tell_info()
39     led.job()
40     pu = Putonh('a',18)
41     pu.tell_info()
View Code

         繼承主要有兩種繼承方式:1.在python2.7經典類中是深度優先繼承 2.在2.7新式類中是廣度優先繼承3.在3.x中都是廣度優先

 1 class A(object):
 2     def __init__(self):
 3         print("in the A")
 4 class B(A):
 5     def __init__(self):
 6         print("in the B")
 7 class C(A):
 8     def __init__(self):
 9         print("in the C")
10 class D(B,C):
11     # def __init__(self):
12     #     print("in the D")
13     pass
14 D()
View Code

 

        3.多態 

               允許你將父對象設置成為和一個或多個子對象相同的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運行,為了實現介面            重用。

 1 class Animal():
 2     def __init__(self,name):
 3         self.name = name
 4     def talk(self):
 5         raise NotImplementedError("Subclass must implement abstract method")
 6 
 7 class Cat(Animal):
 8     def talk(self):
 9         print("喵喵喵")
10 class Dog(Animal):
11     def talk(self):
12         print("WOw")
13 def func(obj):
14     obj.talk()
15 if __name__ == '__main__':
16    c1 = Cat('dd')
17    d1 = Dog("xx")
18    func(c1)
19    func(d1)               #一個介面,多種實現
View Code
 1 class Animal():
 2     def __init__(self,name):
 3         self.name = name
 4     def talk(self):
 5         raise NotImplementedError("Subclass must implement abstract method")
 6     @staticmethod
 7     def animal_talk(obj):
 8         obj.talk()
 9 class Cat(Animal):
10     def talk(self):
11         print("喵喵喵")
12 class Dog(Animal):
13     def talk(self):
14         print("WOw")
15 
16 if __name__ == '__main__':
17    c1 = Cat('dd')
18    d1 = Dog("xx")
19    Animal.animal_talk(c1)
20    Animal.animal_talk(d1)
View Code

 三、靜態方法 @staticmethod 實際上讓方法變成與類沒關係,變成類下的一個方法,不要傳self

    

四、類方法 @classmethod 只能調用類屬性,不能訪問實例屬性

    

五、靜態方法@property 1.將方法變為靜態屬性,調用時直接實例+方法名,不加括弧  

     

六、其他特殊成員方法

  1.__doc__ 表示類的描述信息

  2.__module__表示當前操作的對象在哪個模塊

  3.__class__表示當前操作的類是哪個

  4.__init__構造函數,通過類創建對象時,自動觸發

  5.__del__析構函數,當對象在記憶體中釋放的時候,自動觸發

  6.__call__對象後面加(),觸發執行,或類()()

  7.__dict__查看類或對象的所有屬性,類.__dict__只能查看類中的屬性,對象.__dict__只能查看對象中的屬性。

  8.__getitem__ /__setitem__/__delitem__用於索引操作,分別對應獲得,設置,刪除操作

  

 1 def tell(self):
 2     print("my name is %s"%self.name)
 3 class Foo(object):
 4     def __init__(self):
 5         self.name = 'zz'
 6     def func(self):
 7         return 'func'
 8 foo = Foo()
 9 print(hasattr(foo,'name'))   #判斷是否有名字屬性
10 print(hasattr(foo,'func'))   #判斷是否有func方法
11 print(getattr(foo,'name'))  #獲得name屬性的值
12 print(getattr(foo,'func'))  #獲得func對應的函數地址
13 setattr(foo,"age",18)    #設置成員函數
14 setattr(foo,"tell",tell)   
15 print(getattr(foo,'age'))
16 fuc = getattr(foo,"tell")
17 fuc(foo)
18 delattr(foo,"name")  #刪除成員函數
View Code

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 介紹 ES6,也叫ECMAScript2015(以下統稱ES6),是ECMAScript標準的最新版本。這個標準在2015年6月份被正式批准。ES6是js語言很有意義的一次更新,也是2009年ES5被標準化以來第一次重大的更新。主流javascript引擎中的這些新特性正在開發中。 ES6特性完整版 ...
  • npm i https://github.com/iconic/open-iconic.git -D 因為boostrap的css里刪除了圖標 分開了 我們在引入個呵呵。 下載:npm i [email protected] -D由於4.x版本icon文件分離出去所以還需要下載open-iconic: ...
  • 外觀模式隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。它想現有的系統添加了一個介面,以隱藏系統的複雜性 ...
  • 反爬 / 封 IP 對於封 IP 的情況,可以分為幾種情況來處理: 首先尋找手機站點、App 站點,如果存在此類站點,反爬會相對較弱。 使用代理,如抓取免費代理、購買付費代理、使用 Tor 代理、Socks 代理等。 在代理的基礎上維護自己的代理池,防止代理浪費,保證實時可用。 搭建 ADSL 撥... ...
  • ruby入門掌握其實很簡單,下麵對我司主要使用的部分入門做一個簡單的歸納總結: 文章結構: 1、變數 2、操作符 3、if~else~end 、unless 4、數組(Array) 5、哈希(Hash) 6、迴圈(each do|變數|) 1、變數操作 變數分為:整數型(int);浮點型(float ...
  • mybatis xml格式文件中,不允許出現類似“>”這樣的字元,但是都可以使用符號進行說明,將此類符號不進行解析。或者進行轉義。 ...
  • @Author:SimpleWu 什麼是Swagger? Swagger是什麼:THE WORLD’S MOST POPULAR API TOOLING 根據官網的介紹: Swagger Inspector:測試API和生成OpenAPI的開發工具。Swagger Inspector的建立是為瞭解決 ...
  • 在windows上安裝完Python環境後,開始按照《笨辦法學Python》書上介紹的章節進行練習。 習題 1: 第一個程式 第一天主要是介紹了Python中輸出函數print的使用方法,但是有一個註意點需要註意的是: Python2中可以不加括弧直接(單/雙)引號輸出,Python3中必須要加括弧 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...