小菜鳥學習Python之路--OOP(2)
阿新 • • 發佈:2018-12-17
繼承和多型
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