華文網

Java程式師學Python(零):為什麼學Python

流行與趨勢

Python成為最流行程式設計語言之一,近幾年及以後幾年都將流行下去,尤其是AI的興起。

國內最流行的兩個方向:web開發、自動化運維開發

國內正在興起的方向:自動化測試、資料分析、機器學習

Python語言特點

Python語言:全能語言

1.Python語言本身簡潔,具有清晰的語法結構。大家也把它稱作可執行偽代碼(executable pseudo-code)。

2.易於操作純文字檔。

3.使用廣泛,存在大量的開發文檔及協力廠商庫。比如可以借助功能全面的框架Django或者輕量的Flask框架快速搭建自己的網站;借助PyGame寫一個小遊戲;借助Scrapy做一個爬蟲;借助Pandas資料框架,做資料統計分析。

4.再包裝其他語言的程式。Python又叫做膠水語言,因為它可以用混合編譯的方式使用c/c++/java等等語言的庫。

招聘職位及待遇

Python可以應聘職位:

1.網站後端程式師

2.自動化運維

3.資料分析師

4.遊戲開發者

5.自動化測試

待遇方面,嘖嘖,大家去招聘網站上看看就清楚了。

前面兩天給大家更新了類,今天繼續更新類的要求。


閱讀本文大概需要9分鐘

類相當於一個容器,將狀態(資料屬性)和一些行為(方法)包裹在一起,今天我們就來講講Python中的方法.

Python中的方法分為3種,一般的書對這幾個概念都沒有仔細講,我覺得把這些概念弄清楚,對深入瞭解類是很有必要的,不然設計類的時候根本寫不出真正的OOP.

在Python中定義類的方法和函數都使用def語句,就像定義其他的函數一樣來指定其行為.本質上方法其實就是函數

要點:

類的實例方法

類的靜態函數

類方法

類方法,靜態函數,實例方法之間調用關係

1.類的實例方法

類的實例方法一般有一個顯著的特徵就是會帶有self參數,它的第一個正式參數名為self(這參數有點類似java裡面的this),這些方法會訪問實例的屬性.

看下面的實例代碼:

揭秘一下這個調用的過程:

1).step1,step2把參數'arun','seema'傳給__init__()裡面的data

2).step3 self參數就是ik1物件實例的引用

3).在step4調用printd()這個實例函數的時候,我們不需要把ik1傳遞self,python自動幫你搞定

2.類的靜態函數

類中的方法一般有self的方法也叫綁定物件方法,那Python中有沒有不帶self,當然有的,靜態函數方法就是其中一個

靜態方法需要有一個修飾關鍵字staticmethod,注意前面有一個@,連起來@staticmethod表示下面聲明的是一個靜態函數方法,

這是Python中的一種特殊用法,其實就是用了一個裝飾器的技巧(關於裝飾器是Python中複雜的概念之一,本文先不講後面會詳細給大家講,大家在用web框架比如flask裡面會大量用到裝飾器的概念)

那麼Python中為啥要有靜態函數呢:

場景就是和類相關的操作,但是又不會依賴和改變類、實例的狀態,比如經常有跟類有關係的函數,我們希望它在運行時又不需要實例和類參與的情況下直接就能調用。調用靜態方法可以無需創建物件

舉個簡單的例子:

有一個機器人的類,有兩個方法重啟(do_Reset)和保存資料庫(save_DB),這兩個方法操作之前都需要檢查指令

robot1 = Robot('No1_Machine')

robot1.do_Reset()

robot1.save_DB()

>>

Reset done for :No1_Machine

DB connection ready for: No1_Machine

robot2 = Robot('No2_Machine')

robot2.do_Reset()

robot2.save_DB()

>>

Reset done for :No2_Machine

DB connection ready for: No2_Machine

這樣是不是很麻煩,能不能把這個check_Indication()放到類裡面,並且讓類的所有物件都能方便共用呢,有同學說簡單,挪進來,然後再把調用check_Indication的地方變成Robot.check_Indication()

robot1 = Robot('No1_Machine')

robot1.do_Reset()

>>

TypeError: unbound method check_Indication() must be called

with Robot instance as first argument (got nothing instead)

直接報錯,根本不行,這個時候靜態函數就可以派上用場了

robot1 = Robot('No1_Machine')

robot1.do_Reset()

robot1.save_DB()

robot2 = Robot('No2_Machine')

robot2.do_Reset()

robot2.save_DB()

>>

Reset done for :No1_Machine

DB connection ready for: No1_Machine

Reset done for :No2_Machine

DB connection ready for: No2_Machine

3.類方法

類的方法就叫類方法,當我們要寫一個隻在類中運行而不在實例中運行的方法.

比如我們想讓方法不在實例中運行,就可以用到類方法.也是用裝飾器@classmethod來修飾的

舉個例子我們有一個Student類,我們想記錄有多少個學生

def get_num_of_instance(cls_obj):

return cls_obj.num_student

class Student(object):

num_student=0

def __init__(self):

Student.num_student+=1

s1=Student()

s2=Student()

total_num=get_num_of_instance(Student)

print total_num

>>

2

其實我完全可以在類裡面建一個函數,然後獲得類的引用去獲取類的變數,這樣不是很簡單嗎:

class Student(object):

num_student=0

def __init__(self):

Student.num_student+=1

@classmethod

def get_num_of_instance(cls):

return cls.num_student

s1=Student()

s2=Student()

total_num=s1.get_num_of_instance()

print total_num

>>

2

total_num=s2.get_num_of_instance()

print total_num

>>

2

total_num=Student.get_num_of_instance()

print total_num

>>

2

這樣的好處是:

不管這個方式是從實例調用還是從類調用,它都用第一個參數把類傳遞過來.聰明的同學發現其實類方法的作用和靜態函數很像,確實很像,接著往下看

4.類方法,靜態函數,實例方法之間調用關係

1). 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問實例成員變數和實例方法;實例方法則無此限制

2).實例方法可以訪問實例屬性和類屬性,也可以訪問靜態方法和類方法.

3). 類方法可以被物件調用,也可以被實例調用;傳入的都是類物件,主要用於工廠方法,具體的實現就交給子類處理

3). 靜態方法參數沒有實例參數 self, 也就不能調用實例參數,實例方法

好了Python中的類方法揭秘就講到這裡啦,希望能給初學者一些啟發,若有什麼不懂的,也可以留言跟我探討交流.

最後說一下,原創真的不易,希望大家能夠給點支持,歡迎轉發轉發轉發,留言留言留言,重要的事情說三遍,也是對我的一點鼓勵和動力.

比如經常有跟類有關係的函數,我們希望它在運行時又不需要實例和類參與的情況下直接就能調用。調用靜態方法可以無需創建物件

舉個簡單的例子:

有一個機器人的類,有兩個方法重啟(do_Reset)和保存資料庫(save_DB),這兩個方法操作之前都需要檢查指令

robot1 = Robot('No1_Machine')

robot1.do_Reset()

robot1.save_DB()

>>

Reset done for :No1_Machine

DB connection ready for: No1_Machine

robot2 = Robot('No2_Machine')

robot2.do_Reset()

robot2.save_DB()

>>

Reset done for :No2_Machine

DB connection ready for: No2_Machine

這樣是不是很麻煩,能不能把這個check_Indication()放到類裡面,並且讓類的所有物件都能方便共用呢,有同學說簡單,挪進來,然後再把調用check_Indication的地方變成Robot.check_Indication()

robot1 = Robot('No1_Machine')

robot1.do_Reset()

>>

TypeError: unbound method check_Indication() must be called

with Robot instance as first argument (got nothing instead)

直接報錯,根本不行,這個時候靜態函數就可以派上用場了

robot1 = Robot('No1_Machine')

robot1.do_Reset()

robot1.save_DB()

robot2 = Robot('No2_Machine')

robot2.do_Reset()

robot2.save_DB()

>>

Reset done for :No1_Machine

DB connection ready for: No1_Machine

Reset done for :No2_Machine

DB connection ready for: No2_Machine

3.類方法

類的方法就叫類方法,當我們要寫一個隻在類中運行而不在實例中運行的方法.

比如我們想讓方法不在實例中運行,就可以用到類方法.也是用裝飾器@classmethod來修飾的

舉個例子我們有一個Student類,我們想記錄有多少個學生

def get_num_of_instance(cls_obj):

return cls_obj.num_student

class Student(object):

num_student=0

def __init__(self):

Student.num_student+=1

s1=Student()

s2=Student()

total_num=get_num_of_instance(Student)

print total_num

>>

2

其實我完全可以在類裡面建一個函數,然後獲得類的引用去獲取類的變數,這樣不是很簡單嗎:

class Student(object):

num_student=0

def __init__(self):

Student.num_student+=1

@classmethod

def get_num_of_instance(cls):

return cls.num_student

s1=Student()

s2=Student()

total_num=s1.get_num_of_instance()

print total_num

>>

2

total_num=s2.get_num_of_instance()

print total_num

>>

2

total_num=Student.get_num_of_instance()

print total_num

>>

2

這樣的好處是:

不管這個方式是從實例調用還是從類調用,它都用第一個參數把類傳遞過來.聰明的同學發現其實類方法的作用和靜態函數很像,確實很像,接著往下看

4.類方法,靜態函數,實例方法之間調用關係

1). 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問實例成員變數和實例方法;實例方法則無此限制

2).實例方法可以訪問實例屬性和類屬性,也可以訪問靜態方法和類方法.

3). 類方法可以被物件調用,也可以被實例調用;傳入的都是類物件,主要用於工廠方法,具體的實現就交給子類處理

3). 靜態方法參數沒有實例參數 self, 也就不能調用實例參數,實例方法

好了Python中的類方法揭秘就講到這裡啦,希望能給初學者一些啟發,若有什麼不懂的,也可以留言跟我探討交流.

最後說一下,原創真的不易,希望大家能夠給點支持,歡迎轉發轉發轉發,留言留言留言,重要的事情說三遍,也是對我的一點鼓勵和動力.