python 之 面向對象(多態性、內置函數補充)

来源:https://www.cnblogs.com/mylu/archive/2019/07/05/11140843.html
-Advertisement-
Play Games

7.6 多態性 1 什麼是多態性 多態指的是同一種事物多種形態,在程式中用繼承可以表現出多態。多態性:可以在不用考慮對象具體類型的前提下而直接使用對象下的方法 2、為什要用多態 用基類創建一套統一的規則,強制子類去遵循(使用抽象類實現),可以在不考慮對象具體的類的情況下直接參考基類的標準使用對象 7 ...


7.6 多態性

1 什麼是多態性 多態指的是同一種事物多種形態,在程式中用繼承可以表現出多態。多態性:可以在不用考慮對象具體類型的前提下而直接使用對象下的方法

2、為什要用多態 用基類創建一套統一的規則,強制子類去遵循(使用抽象類實現),可以在不考慮對象具體的類的情況下直接參考基類的標準使用對象

import abc                             #abstract class
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def eat(self):
        pass
    @abc.abstractmethod
    def drink(self):
        pass
    @abc.abstractmethod
    def run(self):
        pass
    @abc.abstractmethod
    def bark(self):
        pass
# obj=Animal() # 抽象基類本身不能被實例化

class Cat(Animal):
    def eat(self):
        print('cat eat')
    def drink(self):
        print('cat drink')
    def run(self):
        print('cat run')
    def bark(self):
        print('喵喵喵')

class Dog(Animal):
    def eat(self):
        print('dog eat')
    def drink(self):
        print('dog drink')
    def run(self):
        print('dog run')
    def bark(self):
        print('汪汪汪')
c=Cat()
d=Dog()
p=Pig()

c.bark()        #喵喵喵
d.bark()        #汪汪汪
p.bark()        #哼哼哼
View Code

7.7 綁定到類的方法 classmethod

將類中的一個函數綁定給類

綁定到類的方法特殊之處: 應該由類來調用,類來調用,會自動將類當作第一個參數傳入

import settings                         #settings記憶體入NAME='lxx'和AGE=30
class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age
​
    def tell(self):
        print('%s:%s' %(self.name,self.age))
​
    @classmethod                        #添加裝飾器後不用再傳值,會自動傳入
    def from_conf(cls):
        return cls(settings.NAME,settings.AGE)
#p4=People.from_conf(People)
print(People.from_conf)                 #在沒有添加裝飾器前得到函數地址,添加後得到綁定方法
p4=People.from_conf()
p4.tell()                               #lxx: 30

7.8 非綁定方法 staticmethod

將類中的一個函數解除綁定

特性:既不跟類綁定,也不跟對象綁定,這意味著誰都能用誰來用都是一個普通函數,也就是說沒有自動傳值的特性

import hashlib
import time
class People:
    def __init__(self,name,age):
        self.uid=self.create_id()
        self.name=name
        self.age=age
​
    def tell(self):
        print('%s: %s:%s' %(self.uid,self.name,self.age))
        
    @staticmethod           #添加staticmethod:非綁定方法,就是一個普通函數 ,不會自動傳值
    def create_id():
        m=hashlib.md5()
        m.update(str(time.clock()).encode('utf-8'))
        return m.hexdigest()
​
obj=People('egon',18)
print(obj.uid,obj.name,obj.age)     #9fbd3ac399adea6bbee8d9d5701b17e4 egon 18
print(obj.create_id)                #<function People.create_id at 0x0000028449338268>
print(People.create_id)             #<function People.create_id at 0x0000028449338268>
print(obj.create_id())              #3ae1b28e5eef6c45294713de36dd1a3f
print(People.create_id())           #c8134ea8e08cab3f68d4fa9622a30f8c

7.9 內置函數補充

isinstance(對象,類):判斷一個對象是否是一個類的實例

class Foo:
    pass
​
obj=Foo()
print(isinstance(obj,Foo))      #Ture   # 推薦使用該函數來判斷一個函數的類型
print(isinstance('abc',str))
print(isinstance(123,int))

issubclass(子類,父類):判斷一個類是否是另一個類的子類

print(issubclass(Foo,object))   #True

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

-Advertisement-
Play Games
更多相關文章
  • Win10下安裝Hadoop3.1.2詳解 嘗試在本地win10上安裝hadoop,在官網選擇了最新的hadoop版本,就是這裡開始給自己挖了坑,對著網上的博客一頓操作,發現節點一直啟動不成功。本著不放棄的原則,在不停的配置過程中繼續折騰,終於解決問題。 安裝環境 JDK 1.8 Windows10 ...
  • 一、JDK 1.含義:Java開發工具包。 2.做Java開發之前必須安裝的一個工具包,​下載地址:https://www.oracle.com/index.html 3.Java包括三大塊內容: (1)JavaSE(Java標準版),這是基礎必知必會 (2)JavaEE(Java企業版) (3)J ...
  • 1.Redis單進程: 單進程模型來處理客戶端的請求。對讀寫等事件的響應是通過對epoll函數的包裝來做到的。Redis的實際處理速度完全依靠主進程的執行效率。epoll是Linux內核為處理大批量文件描述符而作了改進的epoll,是Linux下多路復用IO介面select/poll的增強版本,它能 ...
  • [TOC] 1.while迴圈 死迴圈 打斷死迴圈: 關鍵字: 2.字元串格式化: 3.運算符 4.編碼 四種(重要) 單位轉換 ...
  • 一. 安全性問題 線程安全的本質是正確性,而正確性的含義是程式按照預期執行 理論上線程安全的程式,應該要避免出現可見性問題(CPU緩存)、原子性問題(線程切換)和有序性問題(編譯優化) 需要分析是否存線上程安全問題的場景:存在共用數據且數據會發生變化,即有多個線程會同時讀寫同一個數據 針對該理論的解 ...
  • this 註意 public class ThisDemo { public static void main(String[] args) { } } class Person{ public String name; public int age; public boolean gender; ...
  • 1.TP框架基礎 1.1目錄結構 1.2配置文件 1.框架主配置文件(慣例配置文件) thinkphp/convention.php 2. 應用公共配置文件 application/config.php, application/database.php 對整個應用生效 3.模塊配置文件 appli ...
  • 一、數字 整數 Python可以處理任意大小的整數,當然包括負整數,在程式中的表示方法和數學上的寫法一模一樣,例如:1,100,-8080,0,等等。 電腦由於使用二進位,所以,有時候用十六進位表示整數比較方便,十六進位用0x首碼和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...