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中的類方法揭秘就講到這裡啦,希望能給初學者一些啟發,若有什麼不懂的,也可以留言跟我探討交流.
最後說一下,原創真的不易,希望大家能夠給點支持,歡迎轉發轉發轉發,留言留言留言,重要的事情說三遍,也是對我的一點鼓勵和動力.