Python類的繼承 多型及獲取物件資訊操作詳解

2022-09-28 20:45:32 字數 2870 閱讀 4308

繼承

類的繼承機制使得子類可以繼承父類中定義的方法,擁有父類的財產,比如有乙個animal的類作為父類,它有乙個eat方法:

class animal(object):

def __init__(self):

print("animal 構造函式呼叫!")

def eat(self):

print("animal i eatting!")

寫兩個子類,cat和dog類,繼承自animal類,宣告方法是在定義子類的時候在子類的括號內寫上父類animal:

class animal(object):

def __init__(self):

print("animal 構造函式呼叫!")

def eat(self):

print("animal is eatting!")

class cat(animal):

def __init__(self):

print("cat 構造函式呼叫!")

class dog(animal):

def __init__(self,age):

self.age=age

print("dog 構造函式呼叫!")

兩個子類中並沒有宣告任何方法,但是會自動繼承父類中的eat方法:

cat=cat()

dog=dog(3)

cat.eat()

dog.eat()

宣告兩個物件,呼叫eat方法,執行輸出:

cat 構造函式呼叫!

dog 構造函式呼叫!

animal is eatting!

animal is eatting!

一般把一些共有的方法定義在基類中,其他繼承自該基類的子類就可以自動擁有這個方法。

多型在繼承的基礎上,就引入了類的另外乙個重要的特性——多型。

考慮乙個問題,子類可以繼承父類的方法,那子類是否可以實現自己的這個方法呢,答案是可以的。

class animal(object):

def __init__(self):

print("animal 構造函式呼叫!")

def eat(self):

print("animal is eatting!")

class cat(animal):

def __init__(self):

print("cat 構造函式呼叫!")

def eat(self):

print("cat is eatting!")

class dog(animal):

def __init__(self,age):

self.age=age

print("dog 構造函式呼叫!")

def eat(self):

print("年齡是"+str(self.age)+"歲的dog is eatting!")

cat =cat()

cat.eat()

dog=dog(3)

dog.eat()

子類如果也定義了自己的實現,就會優先呼叫自己的實現,上邊cat和dog呼叫eat方法就分別是自己的實現,執行輸出:

cat 構造函式呼叫!

cat is eatting!

dog 構造函式呼叫!

年齡是3歲的dog is eatting!

多型意味著乙個介面,多種實現,另乙個可以體現類的多型這種特性的例子:

def eat(animal):

if hasattr(animal,'eat'):

animal.eat()

if hasattr(animal,'age'):

a=getattr(animal,'age')

print('animal的年齡是'+str(a)+'歲')

eat(dog)

這裡定義了乙個普通函式eat,函式的入參是類的物件,具體實現是呼叫傳入的物件的e程式設計客棧at方法,傳入不同的物件,就有不同的輸出,呼叫的時候只要呼叫這個介面就可以了,而不用管具體的細節。

執行輸出:

年齡是3歲的dog is eatting!

animal的年齡是3歲

獲取物件資訊

hasattr(object , 'name程式設計客棧')

說明:判斷物件object是否包含名為name的屬性或方法,如果有則返回true,沒有則返回false

getattr( object, 'name')

說明:獲取物件object中名稱為name的屬性,返回name的值。

對類中方法的呼叫,可以先用hasattr判斷是否存在該方法,然後再呼叫這個方法,避免異常:

class animal(object):

def __init__(self):

print("animal 構造函式呼叫!")

def eat(self):

print("animal is eatting!")

def eat(animal):

if hasattr(animal,'eat'):

animal.eat()

if hasattr(animal,'age'):

a=getattr(animal,'age')

print('animal的年齡是'+str(a)+'歲')

if hasattr(animal, 'sleep'):

animal.sleep()

else:

print('animal類中不含有sleep方法!affvtpqxze')

animal=animal()

eat(animal)

執行輸出:

animal 構造函式呼叫!

animal is eatting!

animal類中不含有sleep方法!

Python類的繼承 多型及獲取物件資訊操作詳解

繼承 類的繼承機制使得子類可以繼承父類中定義的方法,擁有父類的財產,比如有乙個animal的類作為父類,它有乙個eat方法 class animal object def init self print animal 構造函式呼叫!def eat self print animal is eatti...

python 類 封裝 繼承 多型

類由一系列函式物件組成,在類中,函式物件稱為方法,方法的第乙個引數必須為self,表示當前例項物件 可把類理解為乙個dict,key為方法名 string型別 value為方法 class animal object def init self,age,color self.age age self...

python類的繼承與多型

定義乙個類 class animal object defrun self print animal is runnning 繼承此類 class dog animal pass例項化 dog.run animal is runnning 以上 母類擁有乙個方法 此方法會繼承到子類,故子類也可以執行...