Python類的繼承、多態(tài)及獲取對象信息操作詳解
本文實例講述了Python類的繼承、多態(tài)及獲取對象信息操作。分享給大家供大家參考,具體如下:
繼承
類的繼承機制使得子類可以繼承父類中定義的方法,擁有父類的財產,比如有一個Animal的類作為父類,它有一個eat方法:
class Animal(object):
def __init__(self):
print("Animal 構造函數(shù)調用!")
def eat(self):
print("Animal is eatting!")
寫兩個子類,Cat和Dog類,繼承自Animal類,聲明方法是在定義子類的時候在子類的括號內寫上父類Animal:
class Animal(object):
def __init__(self):
print("Animal 構造函數(shù)調用!")
def eat(self):
print("Animal is eatting!")
class Cat(Animal):
def __init__(self):
print("Cat 構造函數(shù)調用!")
class Dog(Animal):
def __init__(self,age):
self.age=age
print("Dog 構造函數(shù)調用!")
兩個子類中并沒有聲明任何方法,但是會自動繼承父類中的eat方法:
cat=Cat() dog=Dog(3) cat.eat() dog.eat()
聲明兩個對象,調用eat方法,運行輸出:
Cat 構造函數(shù)調用!
Dog 構造函數(shù)調用!
Animal is eatting!
Animal is eatting!
一般把一些共有的方法定義在基類中,其他繼承自該基類的子類就可以自動擁有這個方法。
多態(tài)
在繼承的基礎上,就引入了類的另外一個重要的特性——多態(tài)。
考慮一個問題,子類可以繼承父類的方法,那子類是否可以實現(xiàn)自己的這個方法呢,答案是可以的。
class Animal(object):
def __init__(self):
print("Animal 構造函數(shù)調用!")
def eat(self):
print("Animal is eatting!")
class Cat(Animal):
def __init__(self):
print("Cat 構造函數(shù)調用!")
def eat(self):
print("Cat is eatting!")
class Dog(Animal):
def __init__(self,age):
self.age=age
print("Dog 構造函數(shù)調用!")
def eat(self):
print("年齡是"+str(self.age)+"歲的Dog is eatting!")
cat =Cat()
cat.eat()
dog=Dog(3)
dog.eat()
子類如果也定義了自己的實現(xiàn),就會優(yōu)先調用自己的實現(xiàn),上邊cat和dog調用eat方法就分別是自己的實現(xiàn),運行輸出:
Cat 構造函數(shù)調用!
Cat is eatting!
Dog 構造函數(shù)調用!
年齡是3歲的Dog is eatting!
多態(tài)意味著一個接口,多種實現(xiàn),另一個可以體現(xiàn)類的多態(tài)這種特性的例子:
def eat(animal):
if hasattr(animal,'eat'):
animal.eat()
if hasattr(animal,'age'):
a=getattr(animal,'age')
print('animal的年齡是'+str(a)+'歲')
eat(dog)
這里定義了一個普通函數(shù)eat,函數(shù)的入?yún)⑹穷惖膶ο?,具體實現(xiàn)是調用傳入的對象的eat方法,傳入不同的對象,就有不同的輸出,調用的時候只要調用這個接口就可以了,而不用管具體的細節(jié)。
運行輸出:
年齡是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 構造函數(shù)調用!")
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方法!')
animal=Animal()
eat(animal)
運行輸出:
Animal 構造函數(shù)調用!
Animal is eatting!
animal類中不含有sleep方法!
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Python數(shù)據(jù)分析之Excel和Text文件的讀寫操作方法
Python操作Excel分為兩個主要形式,讀寫和交互式操作,可以用不同的第三方工具,下面這篇文章主要給大家介紹了關于Python數(shù)據(jù)分析之Excel和Text文件的讀寫操作方法,需要的朋友可以參考下2024-08-08
tensorflow: variable的值與variable.read_value()的值區(qū)別詳解
今天小編就為大家分享一篇tensorflow: variable的值與variable.read_value()的值區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07

