Python基礎10 面向物件(下)
阿新 • • 發佈:2019-02-16
作者:玉樹【林】風
歡迎轉載,也請保留這段宣告。
繼承
在現實世界中,不同的類之間可能存在某種從屬關係。
例如:貓和狗都屬於哺乳動物,貓和狗都有2隻眼睛、4個腳、1個尾巴,也能夠吃飯、睡覺、發出叫聲。只是貓的叫聲和狗的叫聲不同。
那麼我們先定義一個哺乳動物類。
# encoding=utf-8 class Mammal: eyes = 2 legs = 4 tail = 1 # 吃東西 def eat(self): print('eating!') # 睡覺 def sleep(self): print('sleeping!') # 發出叫聲 def cry(self): pass
這裡可以發現,貓和狗除cry的方法不同外,其他屬性和行為都相同,那麼我們利用繼承的方式,就不需要重新定義這些相同的屬性和方法了。
class Dog(Mammal):
pass
class Cat(Mammal):
pass
Tom = Cat()
Odd = Dog()
print('Tom has %d eyes' % Tom.eyes)
print('Odd has %d eyes' % Odd.eyes)
Tom.eat()
Odd.eat()
輸出為
Tom has 2 eyes
Odd has 2 eyes
eating!
eating!
可以發現,Mammal的子類Cat和Dog都可以呼叫父類的方法,並獲得父類的屬性。
方法重寫
剛剛我們新建了Cat類和Dog類,各自集成了Mammal類,分別擁有了哺乳動物的基本屬性和行為。但是對於cry這個方法,貓和狗是不一樣的。
Mammal類中cry方法體為pass,即方法為空。
我們可以使用方法重新的辦法將貓和狗的cry方法進行重寫,使貓和狗有各自不同的叫聲。
輸出為# encoding=utf-8 class Dog(Mammal): def cry(self): print('汪汪') class Cat(Mammal): def cry(self): print('喵') Tom = Cat() Tom.cry() Odd = Dog() Odd.cry()
喵
汪汪
通過方法重寫,我們就使Mammal的子類貓和狗擁有了各自不同的叫聲。
私有屬性及私有方法
為了類能夠被安全的呼叫,Python提供了一套屬性、方法私有的方式,防止類中不對外公開的屬性和方法被外部訪問。
我們只需要在定義的變數或方法前加2條下滑線(如:__param_name、__func)即可。
# encoding=utf-8
class fruit:
__private_param = '私有屬性'
def __private_func(self):
print('私有方法')
f = fruit()
print(f.__private_param)
f.__private_func()
啟動後報錯,報錯資訊如下
AttributeError: 'fruit' object has no attribute '__private_param'
如果將第8行程式碼註釋掉,報錯資訊如下
AttributeError: 'fruit' object has no attribute '__private_func'
當我們將屬性或方法定義為私有、通過例項物件的方式就無法直接訪問了,只能在類的內部訪問。
總結
這節課我們將面向物件的剩餘部分講解完畢,主要內容包括:
類的整合
方法的重寫
私有屬性和私有方法的使用