1. 程式人生 > >小菜鳥學習Python之路--OOP(2)

小菜鳥學習Python之路--OOP(2)

繼承和多型

class Human(object):
    def learn(self):
       print('Human is learning')
class Qin(Human):  #繼承human類
    pass
qin = Qin()
qin.learn()   #輸出結果是'Human is learning',獲得human的learn()功能

子類Qin 獲得父類Human的功能,即繼承

class Qin(Human):
    def learn(self):
        print('Qin is learning')
#執行結果是'Qin is learning'

子類和父類擁有相同方法時,子類可以覆蓋父類的learn()。即多型

我們再定義一個接受Human型別變數的函式,則子型別都可以獲得這種方法

def learn_twice(Human):
    human.learn()
    human.learn()
learn_twice(Qin())   #Qin is learning
                     #Qin is learning

只要接受Human 型別,都可以在不改動的情況下呼叫learn_twice方法,先進行子類的learn(),再進行接受Animal型別的learn_twice方法不對子型別加以辨別

獲取物件資訊

isinstance(xxx, class)

判斷xxx是不是 某class 型別

hasattr(obj, 'beauty')物件有beauty屬性嘛?

setattr(obj, 'beauty',eye)給物件加上beauty屬性  迷人的eye

getattr(obj, 'beauty')獲得物件的beauty屬性

例項屬性和類屬性

相同名稱時,例項屬性會覆蓋類屬性。若例項屬性不存在,則會輸出同名類屬性。

class Beauty(object):
    feature = 'beauty'  #給Beauty類新增feature屬性
    def __init__(self,feature):
        self.feature = feature

s = Beauty()
s.feature       #因未輸入s的feature,故輸出Beauty類的feature  ‘beauty’

廖雪峰Python習題

為了統計學生人數,可以給Student類增加一個類屬性,每建立一個例項,該屬性自動增加:

所有例項都共享類屬性

class Student(object):
    count = 0   #類屬性

    def __init__(self, name):
        self.name = name
        Student.count += 1