誒,這個你不可能不知道的啦

2021-10-24 03:45:51 字數 2821 閱讀 4267

物件導向的三大特性:封裝、繼承、多型

今天就聊一下下繼承……

關於父類與子類繼承中,那些不得不說的事……

多繼承init

有乙個類,能夠實現我們需要的大部分功能,但是不能實現全部功能

如何能讓這個類來實現全部的功能呢?

① 直接修改這個類,在這個類中新增我們需要的功能

- 修改起來會比較麻煩,並且會違反ocp原則

② 直接建立乙個新的類

- 建立乙個新的模擬較麻煩,並且需要大量的進行複製貼上,會出現大量的重複性**

③ 直接從animal類中來繼承它的屬性和方法

- 繼承是物件導向三大特性之一

- 通過繼承我們可以使乙個類獲取到其他類中的屬性和方法

- 在定義類時,可以在類名後的括號中指定當前類的父類(超類、基類、super)

子類(衍生類)可以直接繼承父類中的所有的屬性和方法

通過繼承可以直接讓子類獲取到父類的方法或屬性,避免編寫重複性的**,並且也符合**ocp原則**

所以我們經常需要通過繼承來對乙個類進行擴充套件

開放封閉原則(ocp,open closed principle)是所有物件導向原則的核心。

軟體設計本身所追求的目標就是封裝變化、降低耦合,而開放封閉原則正是對這一目標的最直接體現。

其他的設計原則,很多時候是為實現這一目標服務的,例如以liskov替換原則實現最佳的、正確的繼承層次,就能保證不會違反開放封閉原則。

子類從父類中繼承了所有的屬性與方法,但是具體問題具體分析,可能以後子類中不適用某個方法

class

dog:

defbark

(self)

:print

('汪汪汪~~~'

)def

sleep

(self)

:print

('呼呼呼~~~'

)

重寫乙個同名方法與之覆蓋,而又不會影響父類中的原方法

class

dogmini

(dog)

:# class 子類名(父類名)

defbark

(self)

:# 如果dogmini不會』汪汪汪『地叫,這時候就可以採用方法的重寫,用乙個同名函式適配dogmini

print

('嗷嗚嗷嗚~~~'

)

class

shenxian

:# 神仙

deffei

(self)

:print

("神仙都會⻜"

)class

monkey

:# 猴

defchitao

(self)

:print

("猴⼦喜歡吃桃⼦"

)class

sunwukong

(shenxian, monkey)

:# 孫悟空是神仙, 同時也是⼀隻猴

pass

sxz = sunwukong(

)# 孫悟空

sxz.chitao(

)# 會吃桃⼦

sxz.fei(

)# 會⻜

ps:這其中存在乙個非常複雜的mro(method resolution order)問題,在此就不一一贅述,有興趣可以自己去看一下下

傳送門父類中的所有方法都會被子類繼承,包括特殊方法

class

dog:

def__init__

(self, name)

: self._name = name

defbark

(self)

:print

('汪汪汪~~~'

)def

sleep

(self)

:print

('呼呼呼~~~'

)

可以通過建立__init__方法來初始化子類中定義的屬性,還可以進行屬性的拓展

class

dogmini

(dog)

:def

__init__

(self, name, age)

: self._name = name

self._age = age

也可以通過直接呼叫父類中的屬性 (不可拓展)

class

dogmini

(dog)

:def

__init__

(self, name)

: dog.__init__(self, name)

super()可以用來獲取當前類的父類,並且super()返回物件呼叫父類方法時,不需要傳遞self

class

dog(animal)

:def

__init__

(self,name,age)

:super()

.__init__(name)

self._age = age

對於正則,這些你不可能不知道的!

export const phonereg 1 3 5 6 7 8 9 d 手機ex port cons tpas sreg a za z0 9 6,12 手機 export const passreg a za z0 9 手機e xpor tcon stpa ssre g a za z0 9 6,...

你可能不知道的東西

元素可以分為塊級元素,行內元素以及行內塊級元素。行內元素的margin或者padding只有margin left和margin right以及padding left和padding right有效果,margin top margin bottom padding top padding bot...

你可能不知道的const

眾所周知,使用 const 宣告的變數必須同時初始化為某個值。一經宣告,在其生命週期的任何時候都不能再重新賦予新值 const a syntaxerror 常量宣告時沒有初始化 const b 3 console.log b 3 b 4 typeerror 給常量賦值const 宣告只應用到頂級原語...