面向對象-多態,反射

抽象父類

# 抽象父類:擁有抽象方法(子類共有的方法,但是父類不能有具體的實現體)的父類
#       抽象方法:方法名是具體的,但是實現體是抽象的(在子類中重寫來具象化)
?
# 注意點:有抽象方法的父類不能被實例化(假設能被實例化,就可以調用自己的抽象方法,沒有任何意義)
?
# 實現抽象父類的語法
import abs# abstract base class
class Sup(metaclass=abc.ABCMeta):# 抽象父類中的抽象方法,在繼承它的子類中必須有自己的實現體#       -- 抽象父類中的抽象方法實現體就沒有意義,實現與不實現都是pass填充@abc.abstractmethoddef func(self): passclass Sub(Sup):def func(self):# 必須重寫父類的抽象方法

案例

import abc
class Quan(metaclass=abc.ABCMeta):def __init__(self, name):self.name = name# 共有方法,子類繼承就可以了def run(self):print(self.name + 'running')# 抽象方法:子類必須重寫@abc.abstractmethoddef chi(self): pass@abc.abstractmethoddef jiao(self): pass
?
class Dog(Quan):def kanmen(self):print(self.name + '看門')def chi(self):super().chi()print(self.name + '狗糧')def jiao(self):print('汪汪汪')
?
class Wolf(Quan):def bulie(self):print(self.name + '捕獵')def chi(self):print(self.name + '肉')def jiao(self):print('嗷嗷嗷')
?
dog = Dog('來福')
wolf = Wolf('呵呵')
?
dog.jiao()
wolf.jiao()
dog.run()
wolf.run()
View Code

多態

# 多態:對象的多種狀態 - 父類對象的多種(子類對象)狀態
?
import abc
class People(metaclass=abc.ABCMeta):def __init__(self, name):self.name = name@abc.abstractmethoddef speak(self): pass
?
class Chinese(People):def speak(self):print('說中國話')
class England(People):def speak(self):print('說英國話')if __name__ == '__main__':# 多態的體現:功能或是需求,需要父類的對象,可以傳入父類對象或任意子類對象#       注:一般都是規定需要父類對象,傳入子類對象def ask_someone(obj):print('讓%s上臺演講' % obj.name)  # 父類提供,自己直接繼承obj.speak()  # 父類提供,只不過子類重寫了
?ch = Chinese('王大錘')en = England('Tom')# 傳入Chinese | England均可以,因為都是People的一種狀態(體現方式)ask_someone(ch)ask_someone(en)# 傳入str不可以,因為str的對象沒有name和speak# s = str('白骨精')# ask_someone(s)# p = People('kkk')

鴨子類型

# 需求:需要一個對象,該對象有name屬性及speak方法,就可以作為一種狀態的體現被傳入
def ask_someone(obj):print('讓%s上臺演講' % obj.name)obj.speak()
?
# 鴨子類型:
# 1.先規定:有什么屬性及什么方法的類的類型叫鴨子類型
# 2.這些類實例化出的對象,都稱之為鴨子,都可以作為需求對象的一種具體體現
class A:# 能有自己特有的屬性和方法,可以和B完全不一樣,但是必須有鴨子類型規定的屬性和方法,不然就不是鴨子類型def __init__(self, name):self.name = namedef speak(self):print('說AAAA')class B:# 能有自己特有的屬性和方法,可以和A完全不一樣,但是必須有鴨子類型規定的屬性和方法,不然就不是鴨子類型def __init__(self, name):self.name = namedef speak(self):print('說BBBB')ask_someone(B('B'))

反射

# 反射:通過字符串與類及類的對象的屬性(方法)建立關聯
class A:num = 10
print(hasattr(A, 'num'))
res = getattr(A, 'num', '默認值')
print(res)
delattr(A, 'num')
print(setattr(A, 'tag', 10))
# 類的屬性類來操作
?
?
class B:def __init__(self, name):self.name = name
print(hasattr(b, 'name'))
print(getattr(b, 'name', '對象的屬性類不能獲取'))
delattr(b, 'name')
print(setattr(b, 'age', 18))
# 對象的屬性對象來操作
?
?
class C:def fn(self):print('fn')
?@classmethoddef func(cls):print('func')
?
fn = getattr(C, 'fn')
c = C()
fn(c)  # 類獲取對象方法調用時傳入具體的對象
?
obj_fn = getattr(c, 'fn')
obj_fn()  # 對象獲取對象方法調用時不用傳參
?
func = getattr(C, 'func')
func()  # 類獲取類方法調用時不需要傳入參數

轉載于:https://www.cnblogs.com/penghengshan/p/10756439.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448934.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448934.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決 : Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 報錯如題: RollbackException: Transaction marked as rollbackOnly 2. 原因是在一個事物 (Transaction) 中有另外一個…

yii2 migrate 數據庫遷移的簡單分享

開發中經常會用到的方法小結: 1、./yii migrate xxx_xx 在表中插入某字段 : public function up(){$this->addColumn({{application_service}}, auditor, INT(10) NOT NULL COMMENT "審核人" AFTER user_id, CHANGE COLUMN status status t…

養不教 父母之過:10個不能靠老師解決的孩子教育問題

1、寫字和握筆姿勢。 如果你經歷孩子成長的整個過程,你會感悟到,孩子寫一手帥氣的鋼筆字,是非常有價值的技能。把字寫好,是每一個家長的責任。如果你還年輕,不知道怎么教育孩子,那就從這一點開始吧。 記…

jpa : criteria 作排除過濾、條件中除去查出的部分數據、JPA 一個參數可查詢多個字段

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 PS : mybatis 中也有對于 criteria 的使用,見另一文章:mybatis :Criteria 查詢、條件過濾…

將你的前端應用打包成docker鏡像并部署到服務器?僅需一個腳本搞定

將你的前端應用打包成docker鏡像并部署到服務器?僅需一個腳本搞定1.前言前段時間,自己搞了個阿里云的服務器。想自己在上面折騰,但是不想因為自己瞎折騰而污染了現有的環境。畢竟,現在的阿里云已經沒有免費的快照服務了。要想還原…

CVPR2014: DeepID解讀

上周五就要發的,拖........拖.......拖到現在,文中有不準確的地方,歡迎批評指正。DeepID是一種特征提取的算法,由港中文湯曉鷗團隊于2014年提出,發表于CVPR2014。其應用領域是人臉識別的子領域——人臉驗證&#xff0c…

成大事必備9種能力 9種手段 9種心態(圖)

成大事必備9種能力 1、擺正心態,敢于面對現實 對于那些不停地抱怨現實惡劣的人來說,不能稱心如意的現實,就如同生活的牢籠,既束縛手腳,又束縛身心,因此常屈從于現實的壓力,成為懦弱者;而那些…

解決:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 情景描述:只是想簡單寫個 ActiveMQ 的小樣,啟動服務卻報錯: Error starting ApplicationContext…

【計算機視覺】OpenCV篇(3) - 圖像幾何變換(仿射變換/透視變換)

圖像的幾何變換從原理上看主要包括兩種:基于23矩陣的仿射變換(平移、縮放、旋轉和翻轉等)、基于33矩陣的透視變換。 仿射變換基本的圖像變換就是二維坐標的變換:從一種二維坐標(x,y)到另一種二維坐標(u,v)的線性變換: …

Linux學習第五篇之文件處理命令touch、cat、tac、more、less、head、tail

一、touch命令: 命令名稱:touch 命令所在路徑:/bin/touch 執行權限:所有用戶 語法:touch [文件名] 功能描述:創建空文件 例子: touch leanring.file 說明:在當前目錄下創建空文件l…

OpenCL 與 CUDA

根據網站資料,簡單地匯編一下CUDA與OpenCL的區別。如有錯誤請指出。 題外話: 美國Sandia國家實驗室一項模擬測試證明:由于存儲機制和內存帶寬的限制,16核、32核甚至64核處理器對于超級計算機來說,不僅不能帶來性能提升…

DBMS (數據庫管理系統) 是什么

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 數據庫管理系統(英語:database management system,縮寫:DBMS) 是一種針對對…

Eclipse4JavaEE安裝SpringBoot

第一步:下載SpringBoot SpringBoot官網下載鏈接 第二步:在Eclipse里進行安裝 打開Eclipse,菜單欄Help -》Install New Software,進入下圖界面,點擊Add 設置Name和Location,Name看自己喜好,Locat…

django中使用原生sql

django中使用原生sqlfrom django.db import connection cursor connection.cursor() cursor.execute("select * from xx where id1") row cursor.fetchone() users User.objects.raw("select * from user where namexx") for user in users: print(use…

從零開始玩轉 logback、完整配置詳解

官網地址:https://logback.qos.ch/manual/index.html 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 概述 LogBack是一個日志框架,它與Log4j可以說是同出一源&a…

Rust 編程 前言

雖然不是那么明顯,但 Rust 程序設計語言的本質在于 賦能(empowerment):無論你現在編寫的是何種代碼,Rust 能讓你在更為廣泛的編程領域走得更遠,寫出自信。 比如,“系統層面”(“syst…

ffmpeg解碼器優化

在以前的視頻項目中,用到了幾種商業版的H.264解碼器。雖然性能穩定,支持DXVA或CUDA,在高清視頻播放效果上不錯,但是存在一個共同的缺陷-存在幀間延遲。經過我的測算,大概有3幀的緩沖延遲。當幀率在20fps以上時&#xf…

PHP 結合 Boostrap 結合 js 實現學生列表刪除編輯以及搜索功能(完結)

這個自己的小項目要先告一段落了。可能還有許多bug。請見諒 刪除學生功能 PHP: // 這里是通過前端代碼HTML中的 url 傳過來的&#xff0c;用 $_GET 來獲取(相關HTML代碼可以看一下到主頁看一下前幾條博客)if (empty($_GET[num])) exit(<h1>找不到您要刪除的學生的學號<…

ActiveMQ_Windows版本的安裝部署

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1, 保證電腦上安裝了jdk6以上版本的java&#xff0c;并配置了好環境變量 &#xff1b; 2, 官方下載地址&#xff1a;http://activemq.a…

Java 自定義異常(轉載)

1.異常的分類 1. 非運行時異常(Checked Exception) Java中凡是繼承自Exception但不是繼承自RuntimeException的類都是非運行時異常。 2. 運行時異常&#xff08;Runtime Exception/Unchecked Exception&#xff09; RuntimeException類直接繼承自Exception類&#xff0c;稱為運…