91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python類的繼承、多態及獲取對象信息操作詳解

發布時間:2020-10-25 02:58:41 來源:腳本之家 閱讀:116 作者:-牧野- 欄目:開發技術

本文實例講述了Python類的繼承、多態及獲取對象信息操作。分享給大家供大家參考,具體如下:

繼承

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

class Animal(object):
  def __init__(self):
    print("Animal 構造函數調用!")
  def eat(self):
    print("Animal is 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,函數的入參是類的對象,具體實現是調用傳入的對象的eat方法,傳入不同的對象,就有不同的輸出,調用的時候只要調用這個接口就可以了,而不用管具體的細節。

運行輸出:

年齡是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方法!')
animal=Animal()
eat(animal)

運行輸出:

Animal 構造函數調用!
Animal is eatting!
animal類中不含有sleep方法!

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五河县| 丰镇市| 鄂伦春自治旗| 九龙坡区| 安西县| 陆良县| 鄱阳县| 七台河市| 凤城市| 和田市| 宜宾市| 长海县| 潼关县| 牙克石市| 兴义市| 丹东市| 赣州市| 清涧县| 富平县| 邯郸县| 牡丹江市| 盐亭县| 民乐县| 长阳| 赤城县| 右玉县| 满洲里市| 北宁市| 历史| 岳普湖县| 临潭县| 鸡泽县| 屏东县| 砚山县| 闵行区| 高雄市| 巫溪县| 黄浦区| 安顺市| 瑞安市| 潼南县|