本篇內(nèi)容介紹了“python繼承功能是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、繼承特性
1、什么是繼承
繼承就是讓類和類之間產(chǎn)生父子關(guān)系,子類可以擁有父類的靜態(tài)屬性和方法。
[繼承就是可以獲取另外一個(gè)類中的靜態(tài)屬性和普通方法。(并非所有成員)]。
在python中,新建的類可以繼承一個(gè)或多個(gè)父類,父類又可稱為基類或超類,新 建的類稱為派生類或子類。 注意:python中的繼承分為:?jiǎn)卫^承和多繼承。
2、繼承中的子類和父類的概念
父類:用于被繼承的類,稱之為父類,也叫做基類,或者超類。
子類:繼承其他類的類,稱之為子類,也叫做派生類。
3、繼承的作用 就是提高代碼的重用率
練習(xí)1:創(chuàng)建Dog類和Cat類,分別設(shè)置name,gender,age屬性和定義eat()、
class Animal(object):
def __init__(self,name,gender,age):
self.age=age
self.name=name
self.gender=gender
def eat(self):
print("吃。。。。")
def sleep(self):
print("睡。。。。")
def __str__(self):
return "性別{},年齡{}".format(self.name,self.gender,self.age)
class Dog(Animal):
def bite(self):
print("汪汪。。。")
xiaotiandog=Dog("哮天犬","母",21)
xiaotiandog.eat()
xiaotiandog.sleep()
xiaotiandog.bite()
結(jié)果:
吃。。。。
睡。。。。
汪汪。。。
3、查看繼承的父類
格式:類名.bases
注意: (1).python3中如果一個(gè)類沒有繼承任何類,默認(rèn)繼承object類。我們管這種類叫 做新式類。
(2).object類,是python中的祖宗,所有的類都是從object類中繼承下來的。
4、方法的覆寫
子類中定義了和父類中相同的方法,我們叫做方法的復(fù)寫(派生方法)。
實(shí)例對(duì) 象調(diào)用此方法 的時(shí)候就會(huì)調(diào)用自己類中的方法了。
練習(xí)1:定義一個(gè)Person類創(chuàng)建eat()方法,定義一個(gè)Student的類,創(chuàng)建eat()方 法, 規(guī)定學(xué)生去食堂吃飯,定義一個(gè)Boss類創(chuàng)建eat()方法,規(guī)定Boss去酒店吃。
class Person(object):
def eat(self):
print("吃飯")
class Student(Person):
def eat(self):
print("去食堂吃飯")
class Boss(Person):
def eat(self):
print("去酒店吃飯")
student=Student()
student.eat()
boss=Boss()
boss.eat()
結(jié)果:
去食堂吃飯
去酒店吃飯
5、super()
子類和父類有相同的方法,如果子類想調(diào)用父類相同的的方法。可以使用 super()方法。
在python3中,子類執(zhí)行父類的方法也可以直接用super方法 --->super() super默認(rèn)省略了兩個(gè)參數(shù) 第一個(gè)參數(shù)是類名,第二個(gè)參數(shù)是self。
兩個(gè)參數(shù)可 以省略不傳遞例如 super(Student,self) super()還可以從類的外部使用 需要傳遞類名(本類的名稱)和對(duì)象名
例如 super(Student,student)
格式: 父類類名.方法名稱(self) 或者 super().方法名稱()或者super(本類類名,對(duì)象名)
6、init()方法 - 子類繼承父類,如果子類不復(fù)寫父類的init()方法,
創(chuàng)建子類對(duì)象的時(shí)候會(huì)自動(dòng)調(diào)用父類init()方法。 -
子類繼承父類,如果子類復(fù)習(xí)了父類的init()方法,
創(chuàng)建的子類對(duì)象的時(shí)候不會(huì)再調(diào)用父類的init() 方法。
- 注意:python要求復(fù)習(xí)父類的init()方法時(shí),需要調(diào)用父類的init() 因?yàn)榇嬖陔[患,
例如父類的初始化方法有參數(shù),子類初始化無參數(shù),子類再調(diào) 用父類 的參數(shù)的時(shí)候就會(huì)報(bào)錯(cuò)。
class People(object):
def __init__(self,name,age,sex):
print("person------>")
self.name=name
self.age=age
self.sex=sex
def say(self):
print("大家好,我是{},今年{}歲,".format())
class Student(People):
def __init__(self,name,sex,age,score):
super().__init__(name,sex,age)
self.score=score
def talk(self):
print("我是{},成績(jī){}".format(self.name,self.score))
s=Student("王五","男",23,89)
s.talk()
結(jié)果:
person------>
我是王五,成績(jī)89
7、派生屬性 屬性的覆蓋(派生屬性):子類也可以添加自己新的屬性或者在自己這里重新定義 這些屬性(不會(huì)影響到父類),需要注意的是,一旦重新定義了自己的屬性且與 父類重名,那么調(diào)用新增的屬性時(shí),就以自己為準(zhǔn)了(屬性的覆蓋)。
8、私有屬性私有方法在繼承中的表現(xiàn)
父類中的私有方法和私有屬性都是不能被子類繼承下來的。
9、抽象類
之前我們定義了Person類實(shí)現(xiàn)了eat()、drink()方法, 每種人都會(huì)吃喝但是吃喝的地點(diǎn)不同,如果實(shí)現(xiàn)了方法體就浪費(fèi)了。因此我們可 以只定義eat()方法,不實(shí)現(xiàn)方法體,這種形式我們可以將方法定義為抽象方 法,具有抽象方法的類就叫做抽象類。 抽象類是一個(gè)特殊的類,只能被繼承,不能實(shí)例化,抽象類中可以有抽象方法和 普通方法。
(1) .定義抽象類 定義抽象類需要導(dǎo)入 abc模塊。from abc import ABCMeta, abstractmethod
import abc
class Person(metaclass=abc.ABCMeta):
function(){ //技術(shù)指標(biāo) http://www.kaifx.cn/mt4/kaifx/1732.html
@abc.abstractclassmethod
def eat(self):
pass
@abc.abstractclassmethod
def sleep(self):
pass
def breathe(self):
print("呼吸空氣")
class Man(Person):
def eat(self):
print("吃軟飯。。。。")
def sleep(self):
print("睡學(xué)校。。。。")
class Women(Person):
def eat(self):
print("吃硬菜。。。。")
“python繼承功能是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。