'python中的面向對象編程'

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

python中的面向對象編程

通過上面的例子我相信你已經明白了什麼是面向對象了。面向對象的核心就是對象,它實際上是對面向過程的一個封裝,我們需要把自己當成一個leader來審視每一個具體的任務,找到對象,確定對象的屬性和行為,負責好指揮和調度就行,而面向過程的話你就需要完成一個任務的每一個步驟,這樣你會不會累死,哈哈!

2 面向對象-類

2.1 基本概念

從上面的介紹,我們已經理解了什麼是面向過程,什麼是面向對象。那麼我們應該如何在編程中使用面向對象這個思想呢?或者說如何從面向過程的編程思想過渡到面向對象編程的思想呢?具體方法如下:

(1) 列舉出一個任務中具體的實現步驟,也就是面向過程中的那些步驟

(2) 分離(1)中的具體步驟並劃分到某一個對象中

(3) 根據(2)中的對象及對應的行為,抽象出對應的類

(4) 設計類

上面我們提到了一個概念——類。實際上類就是某一個具體對象特徵的抽象,是用來描述具有相同的屬性和方法的對象的集合。為了讓大家更好的理解,請看下面一個例子:

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

python中的面向對象編程

通過上面的例子我相信你已經明白了什麼是面向對象了。面向對象的核心就是對象,它實際上是對面向過程的一個封裝,我們需要把自己當成一個leader來審視每一個具體的任務,找到對象,確定對象的屬性和行為,負責好指揮和調度就行,而面向過程的話你就需要完成一個任務的每一個步驟,這樣你會不會累死,哈哈!

2 面向對象-類

2.1 基本概念

從上面的介紹,我們已經理解了什麼是面向過程,什麼是面向對象。那麼我們應該如何在編程中使用面向對象這個思想呢?或者說如何從面向過程的編程思想過渡到面向對象編程的思想呢?具體方法如下:

(1) 列舉出一個任務中具體的實現步驟,也就是面向過程中的那些步驟

(2) 分離(1)中的具體步驟並劃分到某一個對象中

(3) 根據(2)中的對象及對應的行為,抽象出對應的類

(4) 設計類

上面我們提到了一個概念——類。實際上類就是某一個具體對象特徵的抽象,是用來描述具有相同的屬性和方法的對象的集合。為了讓大家更好的理解,請看下面一個例子:

python中的面向對象編程

小明是個具體的人,他的屬性值和行為值各有三個,我們可以根據小明這個具體的人抽象出優質青年這個類,它是一個抽象化的概念,並不是指一個具體的人。

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

python中的面向對象編程

通過上面的例子我相信你已經明白了什麼是面向對象了。面向對象的核心就是對象,它實際上是對面向過程的一個封裝,我們需要把自己當成一個leader來審視每一個具體的任務,找到對象,確定對象的屬性和行為,負責好指揮和調度就行,而面向過程的話你就需要完成一個任務的每一個步驟,這樣你會不會累死,哈哈!

2 面向對象-類

2.1 基本概念

從上面的介紹,我們已經理解了什麼是面向過程,什麼是面向對象。那麼我們應該如何在編程中使用面向對象這個思想呢?或者說如何從面向過程的編程思想過渡到面向對象編程的思想呢?具體方法如下:

(1) 列舉出一個任務中具體的實現步驟,也就是面向過程中的那些步驟

(2) 分離(1)中的具體步驟並劃分到某一個對象中

(3) 根據(2)中的對象及對應的行為,抽象出對應的類

(4) 設計類

上面我們提到了一個概念——類。實際上類就是某一個具體對象特徵的抽象,是用來描述具有相同的屬性和方法的對象的集合。為了讓大家更好的理解,請看下面一個例子:

python中的面向對象編程

小明是個具體的人,他的屬性值和行為值各有三個,我們可以根據小明這個具體的人抽象出優質青年這個類,它是一個抽象化的概念,並不是指一個具體的人。

python中的面向對象編程

我們根據這個抽象出來的類,就可以生產具體的對象。

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

python中的面向對象編程

通過上面的例子我相信你已經明白了什麼是面向對象了。面向對象的核心就是對象,它實際上是對面向過程的一個封裝,我們需要把自己當成一個leader來審視每一個具體的任務,找到對象,確定對象的屬性和行為,負責好指揮和調度就行,而面向過程的話你就需要完成一個任務的每一個步驟,這樣你會不會累死,哈哈!

2 面向對象-類

2.1 基本概念

從上面的介紹,我們已經理解了什麼是面向過程,什麼是面向對象。那麼我們應該如何在編程中使用面向對象這個思想呢?或者說如何從面向過程的編程思想過渡到面向對象編程的思想呢?具體方法如下:

(1) 列舉出一個任務中具體的實現步驟,也就是面向過程中的那些步驟

(2) 分離(1)中的具體步驟並劃分到某一個對象中

(3) 根據(2)中的對象及對應的行為,抽象出對應的類

(4) 設計類

上面我們提到了一個概念——類。實際上類就是某一個具體對象特徵的抽象,是用來描述具有相同的屬性和方法的對象的集合。為了讓大家更好的理解,請看下面一個例子:

python中的面向對象編程

小明是個具體的人,他的屬性值和行為值各有三個,我們可以根據小明這個具體的人抽象出優質青年這個類,它是一個抽象化的概念,並不是指一個具體的人。

python中的面向對象編程

我們根據這個抽象出來的類,就可以生產具體的對象。

python中的面向對象編程

上面的小華、張三、李四就是一個個具體的對象。上面的整個流程如下圖所示:

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

python中的面向對象編程

通過上面的例子我相信你已經明白了什麼是面向對象了。面向對象的核心就是對象,它實際上是對面向過程的一個封裝,我們需要把自己當成一個leader來審視每一個具體的任務,找到對象,確定對象的屬性和行為,負責好指揮和調度就行,而面向過程的話你就需要完成一個任務的每一個步驟,這樣你會不會累死,哈哈!

2 面向對象-類

2.1 基本概念

從上面的介紹,我們已經理解了什麼是面向過程,什麼是面向對象。那麼我們應該如何在編程中使用面向對象這個思想呢?或者說如何從面向過程的編程思想過渡到面向對象編程的思想呢?具體方法如下:

(1) 列舉出一個任務中具體的實現步驟,也就是面向過程中的那些步驟

(2) 分離(1)中的具體步驟並劃分到某一個對象中

(3) 根據(2)中的對象及對應的行為,抽象出對應的類

(4) 設計類

上面我們提到了一個概念——類。實際上類就是某一個具體對象特徵的抽象,是用來描述具有相同的屬性和方法的對象的集合。為了讓大家更好的理解,請看下面一個例子:

python中的面向對象編程

小明是個具體的人,他的屬性值和行為值各有三個,我們可以根據小明這個具體的人抽象出優質青年這個類,它是一個抽象化的概念,並不是指一個具體的人。

python中的面向對象編程

我們根據這個抽象出來的類,就可以生產具體的對象。

python中的面向對象編程

上面的小華、張三、李四就是一個個具體的對象。上面的整個流程如下圖所示:

python中的面向對象編程

由一個具體的對象抽象成一個類再實例化成一個具體的對象。

2.2 類的定義與實例化

在Python中,定義類是通過class關鍵字完成的,具體方法如下:

class Student(object):
pass

從上面我們可以看出class後面緊接著是類名,即Student,類名通常是大寫開頭的單詞,緊接著是(object),表示該類是從哪個類繼承下來的,通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。

定義好了Student類,就可以根據Student類創建出Student的實例,創建實例是通過類名+()實現的:

Jack = Student()

我們來print(Jack)來看下結果,如下

<__main__.Student object at 0x000001B1B89BA6A0>

我們來解釋下這個輸出,輸出裡面的Student就是類,Object是對象,0x000001B1B89BA6A0這個是內存地址,也就是這個類Student實例化後的對象在內存中地址為0x000001B1B89BA6A0。

為什麼print(Jack)後的結果是那樣的呢?我們來看下整個流程:

"

歡迎來到專欄《Python進階》。在這個專欄中,我們會講述Python的各種進階操作,包括Python對文件、數據的處理,Python各種好用的庫如NumPy、Scipy、Matplotlib、Pandas的使用等等。我們的初心就是帶大家更好的掌握Python這門語言,讓它能為我所用。

今天是《Python進階》專欄的第一期,在本期中,我們將主要介紹Python面向對象的基本理論、類的定義與實例化。

作者 | 湯興旺

編輯 | 言有三

1 Python面向對象基本理論

在解釋面向對象之前,我們先了解另外一個概念,那就是面向過程。面向過程顧名思義其核心在於過程。也就是解決一個實際問題的步驟,即先幹什麼,再幹什麼。舉一個我們平時洗碗的例子,如下圖所示:

python中的面向對象編程

從上圖我們看出小明要想完成洗碗這個任務,他面對的是放水、放碗等六個步驟,他需要通過這六步才能更好的完成洗碗任務。

還是這個例子,我們看看如果是面向對象的思想會是一個怎樣的過程。如下圖所示:

python中的面向對象編程

通過上圖我們可以看出如果是面向對象的思想,小明要想完成洗碗這個任務,他只要起到一個leader的作用就行,而不是去做具體的事情。即小明面向他的兒子,小明的兒子面向自動洗碗機,而自動洗碗機具體洗碗的過程就不是小明兒子關心的事情了,更不是小明關心的事情了。在這一系列的過程中,其實都是在找這個任務可以由誰來做。

python中的面向對象編程

通過上面的例子我相信你已經明白了什麼是面向對象了。面向對象的核心就是對象,它實際上是對面向過程的一個封裝,我們需要把自己當成一個leader來審視每一個具體的任務,找到對象,確定對象的屬性和行為,負責好指揮和調度就行,而面向過程的話你就需要完成一個任務的每一個步驟,這樣你會不會累死,哈哈!

2 面向對象-類

2.1 基本概念

從上面的介紹,我們已經理解了什麼是面向過程,什麼是面向對象。那麼我們應該如何在編程中使用面向對象這個思想呢?或者說如何從面向過程的編程思想過渡到面向對象編程的思想呢?具體方法如下:

(1) 列舉出一個任務中具體的實現步驟,也就是面向過程中的那些步驟

(2) 分離(1)中的具體步驟並劃分到某一個對象中

(3) 根據(2)中的對象及對應的行為,抽象出對應的類

(4) 設計類

上面我們提到了一個概念——類。實際上類就是某一個具體對象特徵的抽象,是用來描述具有相同的屬性和方法的對象的集合。為了讓大家更好的理解,請看下面一個例子:

python中的面向對象編程

小明是個具體的人,他的屬性值和行為值各有三個,我們可以根據小明這個具體的人抽象出優質青年這個類,它是一個抽象化的概念,並不是指一個具體的人。

python中的面向對象編程

我們根據這個抽象出來的類,就可以生產具體的對象。

python中的面向對象編程

上面的小華、張三、李四就是一個個具體的對象。上面的整個流程如下圖所示:

python中的面向對象編程

由一個具體的對象抽象成一個類再實例化成一個具體的對象。

2.2 類的定義與實例化

在Python中,定義類是通過class關鍵字完成的,具體方法如下:

class Student(object):
pass

從上面我們可以看出class後面緊接著是類名,即Student,類名通常是大寫開頭的單詞,緊接著是(object),表示該類是從哪個類繼承下來的,通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。

定義好了Student類,就可以根據Student類創建出Student的實例,創建實例是通過類名+()實現的:

Jack = Student()

我們來print(Jack)來看下結果,如下

<__main__.Student object at 0x000001B1B89BA6A0>

我們來解釋下這個輸出,輸出裡面的Student就是類,Object是對象,0x000001B1B89BA6A0這個是內存地址,也就是這個類Student實例化後的對象在內存中地址為0x000001B1B89BA6A0。

為什麼print(Jack)後的結果是那樣的呢?我們來看下整個流程:

python中的面向對象編程

實際上就是通過這個變量找到對象,然後根據對象裡面的__class__值找到對應的一個類。我們可以看下Jack的__class__屬性值來驗證下,只需要print(Jack.__class__)即可,輸出如下:

<class '__main__.Student'>

不知道你是否明白了創建對象時的底層運作,歡迎交流!

2.3 類的設計

上面我們講解了如何定義一個類及類的實例化,現在我們講解如何設計一個類。就以利用TensorFlow2.0對圖片數據進行預處理的一個方法來講解。具體代碼如下:

import tensorflow as tf
txtfile=r"D://Learning//tensorflow_2.0//smile//datas//train//train.txt"
batch_size = 64
num_classes = 2
image_size = (48,48)
class ImageData:
def read_txt_file(self):
self.img_paths = []
self.labels = []
for line in open(self.txt_file, 'r'):
items = line.split(' ')
self.img_paths.append(items[0])
self.labels.append(int(items[1]))
def __init__(self, txt_file, batch_size, num_classes,
image_size, buffer_scale=100):
self.image_size = image_size
self.batch_size = batch_size
self.txt_file = txt_file
self.num_classes = num_classes
buffer_size = batch_size * buffer_scale
# 讀取圖片
self.read_txt_file()
self.dataset_size = len(self.labels)
print("num of train datas=", self.dataset_size)
# 轉換成Tensor
self.img_paths = tf.convert_to_tensor(self.img_paths, dtype=tf.string)
self.labels = tf.convert_to_tensor(self.labels, dtype=tf.int32)
# 創建數據集
data = tf.data.Dataset.from_tensor_slices((self.img_paths, self.labels))
print("data type=", type(data))
data = data.map(self.parse_function)
data = data.repeat(1000)
data = data.shuffle(buffer_size=buffer_size)
# 設置self data Batch
self.data = data.batch(batch_size)
print("self.data type=", type(self.data))
def augment_dataset(self, image, size):
distorted_image = tf.image.random_brightness(image,
max_delta=63)
distorted_image = tf.image.random_contrast(distorted_image,
lower=0.2, upper=1.8)
float_image = tf.image.per_image_standardization(distorted_image)
return float_image
def parse_function(self, filename, label):
label_ = tf.one_hot(label, self.num_classes)
img = tf.io.read_file(filename)
img = tf.image.decode_jpeg(img, channels=3)
img = tf.image.convert_image_dtype(img, dtype=tf.float32)
img=tf.image.random_crop(img, [self.image_size[0], self.image_size[1], 3])
img = tf.image.random_flip_left_right(img)
img = self.augment_dataset(img, self.image_size)
return img, label_
dataset = ImageData(txtfile, batch_size, num_classes, image_size)

在上面的例子中我們定義了一個ImageData類,類中定義了四個方法分別是__init__()方法、read_txt_file()方法、parse_function()方法和augment_dataset()方法。我們首先來解釋下__init__方法,其實際上可以理解為一個初始化方法,也就是在創建一個對象時會默認被調用,不需要手動調用。但是其他的方法必須要手動的調用,如上面代碼黑色加粗部分。

為了加深對__init__()方法的理解,我們再來看一個簡單的例子,如下:

class AiLearning():
def __init__(self):
self.a = "yousanai"
d = AiLearning()
print(d.a)

上面的輸出很簡單就是yousanai。那如果不是__init__方法,結果會怎樣呢?

class Ai_Learning():
def Learning(self):
self.a = "yousanai"
d = Ai_Learning()
print(d.a)

這個輸出程序會報錯,會顯示AttributeError: 'Ai_Learning' object has no attribute 'a'。即沒有屬性a。我們需要將代碼改成下面的代碼,才能正確輸出,我們所做的改動就是手動調用了Learning()方法。

class Ai_Learning():
def Learning(self):
self.a = "yousanai"
return self.a
d = Ai_Learning()
print(d.Learning())

我相信通過上面的講解你已經明白瞭如何來設計一個類了。

總結

本期我們介紹了Python面向對象的思想及其基本概念,也介紹瞭如何定義一個類、創建一個對象和設計一個類,並介紹了創建對象時的底層運作機制。希望您能更好的掌握面向對象的思想。

下期預告:Python文件操作

"

相關推薦

推薦中...