国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python函數(shù)的重載、多態(tài)和繼承

這篇具有很好參考價值的文章主要介紹了Python函數(shù)的重載、多態(tài)和繼承。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、函數(shù)重載

Python重載函數(shù)是指函數(shù)可以接受不同數(shù)量或類型的參數(shù),這樣可以使得函數(shù)可以處理多種情況。函數(shù)重載是指有多個參數(shù)簽名(即函數(shù)在定義時參數(shù)個數(shù)跟類型)并且有多個舍入函數(shù)體實現(xiàn)。也就是,具有相同名稱但實現(xiàn)多個不同的功能。調(diào)用重載函數(shù)時,運行時首先評估傳遞給函數(shù)調(diào)用的參數(shù),并以此判斷調(diào)用相應(yīng)的實現(xiàn)。它使得用相同的函數(shù)名,可以處理不同類型或數(shù)量上的參數(shù)。

Python中,可以實現(xiàn)函數(shù)重載的方法有三種:

  • 實現(xiàn)同名不同參數(shù)函數(shù)
    需要根據(jù)不同參數(shù)進行分別實現(xiàn),但代碼編寫較繁瑣,可讀性不強。
  • 根據(jù)實參類型確定調(diào)用函數(shù)
    可以根據(jù)實參的類型,通過類型檢查選擇不同的函數(shù)。使代碼更清晰,提高代碼可讀性。
  • 通過 *args和 *kwargs形參對函數(shù)進行重載
    可以使用
    args形參來接收可變的位置參數(shù),使用
    kwargs來接收可變的關(guān)鍵字參數(shù),這種方式可以 同時支持不定數(shù)量參數(shù)和不同類型參數(shù)。
# First multiply method.
# Takes two argument and print their value
def multiply(a, b):
    re = a * b
    print(re)

# Second multiply method.
# Takes three argument and print their value
def multiply(a, b,c):
    re = a * b * c
    print(re)

multiply(3, 4)
Python函數(shù)的重載、多態(tài)和繼承
multiply(3, 4, 5) # This line will call the second multiply method.
Python函數(shù)的重載、多態(tài)和繼承
Python不支持自定義函數(shù)的重載。 當我們用相同的名稱定義多個函數(shù)時,后一個函數(shù)始終會覆蓋前一個函數(shù),因此,在命名空間中,每個函數(shù)名始終只有一個entry。

二、函數(shù)多態(tài)

在python中根據(jù)參數(shù)的不同可以使同一函數(shù)的工作方式不同(多態(tài))

# Function to take multiple arguments 
def add(datatype, *args): 

    # if datatype is int 
    # initialize answer as 0 
    if datatype =='int': 
        answer = 0
        
    # if datatype is str 
    # initialize answer as '' 
    if datatype =='str': 
        answer ='' 

    # Traverse through the arguments 
    for x in args: 

        # This will do addition if the 
        # arguments are int. Or concatenation 
        # if the arguments are str 
        answer = answer + x 

    print(answer) 
# Integer 
add('int', 5, 6) 		# 11
# String 
add('str', 'Hi ', 'Bob') 		# Hi Bob

三、函數(shù)繼承

python中的類支持繼承,并且支持多繼承。python中默認情況是繼承自object(object是python中所有類的基類)

  1. 什么是繼承?
    一個類可以繼承另外一個類,繼承者我們叫子類,被繼承者叫父類。繼承就是讓子類直接擁有父類中的內(nèi)容
  2. 可以繼承哪些內(nèi)容
    所有的屬性和方法都可以繼承
class Person(object):
    num = 61

    # 注意:__slots__對應(yīng)的值不會被繼承
    __slots__ = ('name', 'age', 'sex')

    def __init__(self):
        self.name = '張三'
        self.age = 0
        self.sex = '男'

    def show_message(self):
        print('%s你好嗎?' % self.name)

# Student類繼承自Person類
class Student(Person):
    pass

# 創(chuàng)建學生對象
stu1 = Student()
# 對象屬性可以繼承
print(stu1.name, stu1.age, stu1.sex)

# 類的字段可以繼承
print(Student.num)

# 對象方法可以繼承
stu1.show_message()

p1 = Person()
# p1.color = '黃色'
stu1.color = '白色'
print(stu1.color)

備注:

def __init__(self):
        self.name = '張三'
        self.age = 0
        self.sex = '男'

self 代表著實例, 所以 self.name/self.age/self.sex 是 ‘實例屬性’

總結(jié):區(qū)分清 “類屬性” 和 “實例屬性” 的概念:直接定義在類下面的是類屬性, 定義在__init__中的self.xxx是實例屬性

子類-添加方法

  1. 添加一個新的方法
    直接在子類中聲明其他的方法;
    添加后子類可以調(diào)用自己的方法也可以調(diào)用父類的方法,但是父類不能調(diào)用子類的方法
  2. 重寫父類的方法: 重新實現(xiàn)父類的方法
    完全重寫 - 覆蓋父類的功能 - 直接在子類中重新實現(xiàn)父類的方法
    部分重寫 - 保留父類的功能,添加新的功能 - 在子類中實現(xiàn)父類方法的時候通過super()去調(diào)用父類的方法,
    再添加新的功能
    注意:a.可以子類的方法中通過super()去調(diào)用父類的方法
    super(類, 對象)- 獲取對象中父類的部分(要求對象是這個指定的類的對象)
    b.靜態(tài)方法中不能使用super()
  3. 類中方法的調(diào)用過程
    通過對象或者類調(diào)用方法的時候,先看當前類中是否聲明過這個方法,如果聲明過就直接調(diào)用當前類對應(yīng)的方法;
    如果當前類中沒有聲明過,會去找父類中有沒有聲明過這個方法,聲明過就調(diào)用父類的方法;
    如果父類中也沒有聲明過,就去找父類的父類…以此類推,直到object中也沒有聲明過,程序才會崩潰
    構(gòu)造函數(shù)
class Person:
    # 類的字段
    num = 61

    # 對象屬性
    def __init__(self):   # 有self則為 實例方法,代表實例
        self.name = '張三'  # 實例變量,保存特征值
        self.age = 0
        self.sex = '男'

    def fun1(self):   # 有self則為 實例方法,代表實例
        print('Person的對象方法')

    # 方法
    def show_message(self):		# 有self則為 實例方法,代表實例
        print('%s,你好嗎?' % self.name)

    @staticmethod
    def info():
        print('我是人類')


class Student(Person):

    def study(self):
        print('%s在學生' % self.name)

'''
類變量、實例變量、實例方法、類方法、靜態(tài)方法類方法和靜態(tài)方法不能訪問實例變量
在函數(shù)中不帶self的是類方法或靜態(tài)方法,不能訪問實例變量
實例方法中默認參數(shù)self,類方法中默認參數(shù)cls,靜態(tài)方法沒有默認參數(shù)
類方法中用@classmethod 這種裝飾器,靜態(tài)方法中用@staticmethod 這種裝飾器
'''
    @classmethod		 # @classmethod # 類方法。裝飾器
    def message(cls):   
        super().info()
        print('我是學生!')

    # 完全重寫
    @staticmethod   #@staticmethod # 靜態(tài)方法。裝飾器
    def info():
        print('我是學生?。?!')

    # 保留父類的功能
    def show_message(self):
        super().show_message()
        print('我去上學~')
        super().fun1()

# Student.info()

備注:

(1)類中的方法都是普通方法,第一個參數(shù)是self,這種方法只能被實例調(diào)用,如果被classmethod裝飾,這個方法就是類方法,可以被類和實例調(diào)用

class Student():
    @classmethod		 # @classmethod # 類方法。裝飾器
    def message(self):
        print('我是學生!')

stu = Student()
print(stu.message())  # 輸出我是學生
print(Student.message())  # 輸出我是學生
class Student():

    def message(self):
        print('我是學生!')

stu = Student()
print(stu.message())  # 輸出我是學生
print(Student.message())  # 報錯

File "D:/xxxxx/xxxx.py", line 199, in <module> print(Student.message())TypeError: message() missing 1 required positional argument: 'self'
因為message()第一個參數(shù)是self,這種方法只能被實例調(diào)用

(2)帶參函數(shù) 舉例:fun1(self)
函數(shù)有self則為 實例方法,代表實例

p = Person()   # 實例化
print(p.fun1())   	# 輸出Person的對象方法
print(Person().fun1())    	# 輸出Person的對象方法
print(Person.fun1()) 	# 報錯

File "D:/xxxxx/xxxx.py", line 76, in <module> print(Person.fun1()) TypeError: fun1() missing 1 required positional argument: 'self'
因為方法fun1帶參數(shù)(fun1是實例方法),實例方法需要通用實例對象來訪問。

(3)不帶參數(shù) 舉例:info()
因為info()無self參數(shù),所以直接調(diào)用
在函數(shù)中不帶self的是類方法或靜態(tài)方法,不能訪問實例變量

print(Person.info())  # 輸出我是人類

子類-添加屬性

  1. 添加類的字段
    直接在子類中添加新的字段
  2. 添加對象屬性
    a.繼承對象屬性是通過繼承父類的init方法繼承下來的
    b.如果想要在保留父類繼承下來的對象屬性的前提下,添加新的對象屬性,
    需要在子類的init方法中,通過super()去調(diào)用父類的init方法
class Person:
    num = 61

    def __init__(self, name):
        self.name = name
        self.age = 0


class Student(Person):
    number = 100

    def __init__(self, name):
        super().__init__(name)
        self.study_id = '001'


print(Student.number, Student.num)

stu1 = Student('小明')
print(stu1.name, stu1.age, stu1.study_id)

# 練習:
# 聲明一個動物類,有屬性:年齡,顏色,類型。
#  要求創(chuàng)建動物對象的時候類型和顏色必須賦值,年齡可以賦值也可以不賦值
# 聲明一個貓類,有屬性:年齡,顏色,類型, 愛好
# 要求創(chuàng)建貓對象的時候,顏色必須賦值,年齡和愛好可以賦值也可以不賦值,類型不能賦值


class Aniaml:
    def __init__(self, type, color, age=0):
        self.type = type
        self.color = color
        self.age = age


class Cat(Aniaml):
    def __init__(self, color, age=0, hobby=''):
        super().__init__('貓科', color, age)
        self.hobby = hobby


an1 = Aniaml('犬科', '黃色')
an2 = Aniaml('犬科', '黃色', 10)

cat1 = Cat('白色')
cat2 = Cat('灰色', 3)
cat3 = Cat('灰色', hobby='睡覺')
cat4 = Cat('灰色', 3, '睡覺')

參考文章:
https://blog.csdn.net/bai666ai/article/details/123998686
https://www.jianshu.com/p/4b1f9257a2f2文章來源地址http://www.zghlxwxcb.cn/news/detail-448018.html

到了這里,關(guān)于Python函數(shù)的重載、多態(tài)和繼承的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C++庖丁解牛】面向?qū)ο蟮娜筇匦灾欢鄳B(tài) | 抽象類 | 多態(tài)的原理 | 單繼承和多繼承關(guān)系中的虛函數(shù)表

    【C++庖丁解?!棵嫦?qū)ο蟮娜筇匦灾欢鄳B(tài) | 抽象類 | 多態(tài)的原理 | 單繼承和多繼承關(guān)系中的虛函數(shù)表

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識 ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個完美的句號,讓我們一起加油 需要聲明的,本節(jié)課件中的代碼及解釋都是在vs2013下的x86程序中,涉及的指針都是4bytes。如果要其他平臺

    2024年04月10日
    瀏覽(28)
  • Python-繼承封裝多態(tài)

    介紹 與java一樣Python是一種支持面向?qū)ο缶幊痰母呒壘幊陶Z言,它的核心思想之一就是繼承、封裝和多態(tài)。這三個概念是面向?qū)ο缶幊讨凶罨?、最核心的思想之一,也是Python編程中必須掌握的知識點之一 繼承 在面向?qū)ο缶幊讨校^承是指一個類(稱為子類)從另一個類(稱

    2023年04月08日
    瀏覽(20)
  • python學習之【繼承、封裝、多態(tài)】

    python學習之【繼承、封裝、多態(tài)】

    #來評選你心中的TOP1編程語言# 距離上篇文章 python學習之【類和對象】已有三個星期之久,這篇文章介紹 面向?qū)ο蟮娜筇卣鳌庋b,繼承,多態(tài)。 對于編程初學者來說, 學習python應(yīng)該是比較好入手的 , 文末會給大家介紹下python的一些特點,供需要學習編程語言的伙伴一

    2024年02月12日
    瀏覽(28)
  • Python 中多態(tài)性的示例和類的繼承多態(tài)性

    Python 中多態(tài)性的示例和類的繼承多態(tài)性

    單詞 \\\"多態(tài)\\\" 意味著 \\\"多種形式\\\",在編程中,它指的是具有相同名稱的方法/函數(shù)/操作符,可以在許多不同的對象或類上執(zhí)行。 一個示例是 Python 中的 len() 函數(shù),它可以用于不同的對象。 對于字符串,len() 返回字符的數(shù)量: 示例 對于元組,len() 返回元組中項的數(shù)量: 示例 對

    2024年02月08日
    瀏覽(28)
  • 【C++】 為什么多繼承子類重寫的父類的虛函數(shù)地址不同?『 多態(tài)調(diào)用匯編剖析』

    【C++】 為什么多繼承子類重寫的父類的虛函數(shù)地址不同?『 多態(tài)調(diào)用匯編剖析』

    ?? 樊梓慕: 個人主頁 ??? 個人專欄: 《C語言》 《數(shù)據(jù)結(jié)構(gòu)》 《藍橋杯試題》 《LeetCode刷題筆記》 《實訓項目》 《C++》 《Linux》《算法》 ?? 每一個不曾起舞的日子,都是對生命的辜負 本篇文章主要是為了解答有關(guān)多態(tài)的那篇文章那塊的一個奇怪現(xiàn)象,大家還記得這張

    2024年02月19日
    瀏覽(26)
  • Python面向?qū)ο缶幊蹋ㄒ唬╊惖幕A(chǔ),關(guān)系,繼承,封裝,多態(tài)

    Python面向?qū)ο缶幊蹋ㄒ唬╊惖幕A(chǔ),關(guān)系,繼承,封裝,多態(tài)

    類的一些理論概念及其應(yīng)用場景等基礎(chǔ)內(nèi)容此處不贅述 目錄 python中一切皆對象 類的定義及基礎(chǔ) 屬性 方法 初始化方法 ?普通方法 類之間的關(guān)系 相互調(diào)用 依賴關(guān)系 關(guān)聯(lián)關(guān)系 組合關(guān)系 三大特征----類的繼承 重寫父類方法 多繼承 混合繼承? 三大特征----封裝 三大特征----多態(tài)

    2024年02月10日
    瀏覽(29)
  • python入門基礎(chǔ)(14)--類的屬性、成員方法、靜態(tài)方法以及繼承、重載

    python入門基礎(chǔ)(14)--類的屬性、成員方法、靜態(tài)方法以及繼承、重載

    上一篇提到過類的屬性,但沒有詳細介紹,本篇詳細介紹一下類的屬性 一 、類的屬性 方法是用來操作數(shù)據(jù)的,而屬性則是建模必不的內(nèi)容,而且操作的數(shù)據(jù),大多數(shù)是屬性,比如游戲中的某個boss類,它的生命值就是屬性(不同級別的boss,有不同的生命值),被攻擊方法(不

    2024年02月08日
    瀏覽(20)
  • 【 Python 全棧開發(fā) ? 】面向?qū)ο?、繼承、多態(tài)、類方法與類屬性

    Python 面向?qū)ο缶幊?是一種編程范式,它將數(shù)據(jù)和操作數(shù)據(jù)的方法組合在一起,形成一個“對象”,并且該對象可以被復用。在 Python 中,每一個對象都擁有一些屬性和方法,它們是該對象的特征和行為。 面向?qū)ο缶幊炭梢詭椭覀兏玫亟M織和管理代碼,使得代碼更加模塊

    2024年02月08日
    瀏覽(23)
  • Python的類與對象、構(gòu)造方法、類與對象三大特性封裝、繼承和多態(tài)、類型注解

    Python的類與對象、構(gòu)造方法、類與對象三大特性封裝、繼承和多態(tài)、類型注解

    ? 使用對象組織數(shù)據(jù) 在程序中是可以做到和生活中那樣,設(shè)計表格、生產(chǎn)表格、填寫表格的組織形式的。 在程序中設(shè)計表格,我們稱之為: 設(shè)計類(class) class Student: name None #記錄學生姓名 在程序中打印生產(chǎn)表格,我們稱之為: 創(chuàng)建對象 #基于類創(chuàng)建對象 stu_1 Student() stu_2 St

    2024年02月02日
    瀏覽(29)
  • c、c++、java、python、js對比【面向?qū)ο?、過程;解釋、編譯語言;封裝、繼承、多態(tài)】

    c、c++、java、python、js對比【面向?qū)ο蟆⑦^程;解釋、編譯語言;封裝、繼承、多態(tài)】

    目錄 內(nèi)存管理、適用 區(qū)別 C 手動內(nèi)存管理:C語言沒有內(nèi)置的安全檢查機制,容易出現(xiàn)內(nèi)存泄漏、緩沖區(qū)溢出等安全問題。 適用于系統(tǒng)級編程 C++ 手動內(nèi)存管理:C++需要程序員手動管理內(nèi)存,包括分配和釋放內(nèi)存,這可能導致內(nèi)存泄漏和指針錯誤。 適用于游戲引擎和系統(tǒng)級編

    2024年02月08日
    瀏覽(51)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包