Python刻意練習 Task 10 類與物件

2021-09-29 05:59:47 字數 4734 閱讀 9455

學習資料:

背景知識:

物件導向的語言的四大特徵:

封裝:是物件和類概念的主要特性。封裝是把過程和資料報圍起來,只提供乙個介面供使用者使用,這樣提高了**的安全性,以及使用的簡便性。

繼承:即乙個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把乙個派生類的物件作為乙個基類物件對待。派生類繼承了基類的成員方法和變數,並且可以在類裡增加自己的特性函式變數實現特定功能:比如:基類是圓,派生出圓柱類。這個過程就是類繼承。

物件導向語言的一些基本概念:

引入:python是物件導向的程式語言,因此在python中建立類與物件很容易。python加入了類機制。python中的類提供了物件導向程式設計的所有基本功能:類的繼承機制允許多個基類,派生類可以覆蓋基類中的任何方法,方法中可以呼叫基類中的同名方法。物件可以包含任意數量和型別的資料。

1.類定義與類物件

class 類的名字:

描述1描述2..

. 描述n

class

subjects

: i=

'math'

,'chinese'

,'english'

deff

(self)

:return

'major_subjucts'

x=subjects(

)#例項化類

>>

>

print

(x.i)

('math'

,'chinese'

,'english'

)#訪問類的屬性

>>

>

print

(x.f())

major_subjucts

def

__init__

(self)

: self.data=

init() 方法還可以有引數,引數通過 init() 傳遞到類的例項化操作上。

例:

class

complex

:def

__init__

(self, realpart, imagpart)

: self.r = realpart

self.i = imagpart

x = complex(

3.0,

-4.5

)print

(x.r, x.i)

#3.0 -4.5

class

test

:def

prt(self)

:print

(self)

print

(self.__class__)

t = test(

)t.prt(

)#__main__.test instance at 0x100771878>

__main__.test

從結果可以看出,self 代表的是類的例項,代表當前物件的位址,而 self.class 則代表類。我們把self 換成 runoob 也是可以正常執行的。

2.類的方法

在類的內部,使用 def 關鍵字來定義乙個方法,與一般函式定義不同,類方法必須包含引數 self, 且為第乙個引數,self 代表的是類的例項。

例:

class

people

: name =

'' age =

0 weight =

0def

__init__

(self,n,a,w)

: self.name = n

self.age = a

self.__weight = w

defspeak

(self)

:print

("%s 說: 我 %d 歲。"

%(self.name,self.age)

)p = people(

'runoob',10

,30)p.speak(

)#runoob 說: 我 10 歲。

3.繼承

class 派生類名字(基類名1

,基類名2,.

..,基類名n)

描述1描述2..

. 描述n

注意:圓括號中基類的順序,若是基類中有相同的方法名,而在子類使用時未指定,方法在子類中未找到時,python從左到右查詢基類中是否包含方法。基類名必須與派生類定義在乙個作用域內。

class

derivedclassname

(modname.baseclassname)

:

例:

class

people

: name =

'' age =

0 weight =

0def

__init__

(self,n,a,w)

: self.name = n

self.age = a

self.weight = w

defspeak

(self)

:print

("%s 說: 我 %d 歲。"

%(self.name,self.age)

)#單繼承示例

class

student

(people)

: grade =

''def

__init__

(self,n,a,w,g)

:#呼叫基類的構函

people.__init__(self,n,a,w)

self.grade = g

#覆寫基類的方法

defspeak

(self)

:print

("%s 說: 我 %d 歲了,我在讀 %d 年級"

%(self.name,self.age,self.grade)

)#定義另乙個類,多重繼承之前的準備

class

speaker()

: topic =

'' name =

''def

__init__

(self,n,t)

: self.name = n

self.topic = t

defspeak

(self)

:print

("我叫 %s,我是乙個演說家,我演講的主題是 %s"

%(self.name,self.topic)

)#多重繼承

class

sample

(speaker,student)

: a =

''def

__init__

(self,n,a,w,g,t)

: student.__init__(self,n,a,w,g)

speaker.__init__(self,n,t)

test = sample(

"tim",25

,80,4

,"python"

)test.speak(

)#我叫 tim,我是乙個演說家,我演講的主題是 python

4.方法重寫

如果派生類中需要基類的構造方法就需要顯式地呼叫父類的構造方法或不重寫父類的構造方法(這樣例項化子類時,會自動呼叫基類定義的init())。如果重寫了__init__ ,例項化派生類,就不會呼叫基類定義的init。如果重寫了__init__ 時,要繼承父類的構造方法,可以使用 super 關鍵字:super(子類,self).__init__(引數1,引數2,....)父類名稱.__init__(self,引數1,引數2,...)

5.類屬性與方法

init: 建構函式,在生成物件時呼叫

del: 析構函式,釋放物件時使用

repr: 列印,轉換

setitem: 按照索引賦值

getitem: 按照索引獲取值

len: 獲得長度

cmp: 比較運算

call: 函式呼叫

add: 加運算

sub: 減運算

mul: 乘運算

truediv: 除運算

mod: 求餘運算

pow: 乘方

python學習打卡 Task1

基礎知識 注釋模組 內建函式dir 及help pep8 在mac終端輸入python可進入cpython互動式直譯器,利用print函式向世界打招呼吧 print hello,world 執行結果 hello,world input函式用於接收使用者輸入,先將輸入儲存在變數中,然後列印這個變數 d...

python基礎 打卡task1

a 1type a b float a b 1.0 type b c 1.5type c d int c d 1 type d 2 整型 布林型 a 0type a b bool a type b c flase type c d int c type d 3 浮點型 布林型 a 1.5type a...

程式設計TASK1

1.實現可以動態擴容的陣列 思路 新建陣列的時候,將陣列的容量大小設定為乙個變數,如果陣列容量不夠的時候,可以將原來資料擴大原來的幾倍,進行擴容 也可以直接使用c 中的vector容器,不必考慮原陣列的大小,如果需要增加元素,直接v.pushback 即可 2.將兩個有序陣列合併成乙個有序陣列 思路...