8.1 什么是函數的封裝
教科書上函數的封裝太官方,我們這里暫且將函數的封裝就是為了偷懶把一些有共性的功能或者一些經常用的功能以及模塊放在一起,方便我們以后再其他地方調用。這個只是個人的理解所以大家懂就行,不要出去就這么說。
8.2 如何封裝函數
8.2.1 函數封裝技巧
當我們面對一個功能或者一個模塊時我們需要把一些有共性的東西找出來,然后封裝成函數,只要記住只要我們用的東西可能用的次數超過一次時我們就給他封裝起來,我們不管別人怎么看,我們只要自己干着順手就行。
8.2.2 函數封裝實戰
我們通過下面的代碼來講解:
#coding=UTF-8 def getSize(self): x = self.driver.get_window_size()['width'] y = self.driver.get_window_size()['height'] return (x,y) #向左滑動 def swipeLeft(self,t): l=self.getSize() x1=int(l[0]*0.9) y1=int(l[1]*0.5) x2=int(l[0]*0.1) self.driver.swipe(x1,y1,x2,y1,t) #向右滑動 def swipeRight(self,t): l=self.getSize() x1=int(l[0]*0.25) y1=int(l[1]*0.5) x2=int(l[0]*0.75) self.driver.swipe(x1,y1,x2,y1,t)
上面的代碼是我們之前滑動查找的代碼,我們通過代碼能夠看見我把獲取屏幕大小、上、下、左、右滑動的操作都封裝成了代碼,為什么要這么做呢?一個簡單的例子,如果我獲取屏幕不進行封裝,那么我在往上滑動的時候是不是也要進行去寫一次,其他地方也要寫一次,那么這樣是不是很麻煩呢?而且最簡單的就是那樣我的代碼的可讀性也更差。現在知道我們為什么要封裝了嗎?
如果你還不是很能夠理解,那么你回去把我們的滑動查找的代碼多看幾遍,如果你不對函數進行封裝,那你怎么去實現這個功能?
看到這里的小伙吧給大家留一個思考以及線下的作業題目,如果將你的啟動配置封裝一下,讓他的實用性更佳高。
8.3 構造函數的使用
8.3.1 編碼中構造函數的樣子
有的人在開始學習時不明白構造函數到底是什么,而且經常聽說構造函數,構造函數,到底這個構造函數在哪里。學習過java的小伙伴都知道構造函數的函數名和類名時一模一樣的,那么在python里呢?他們到底是怎么工作的呢?
首先下面會寫一些偽代碼,所以不要拿去運行。
第一在我們寫類的時候是這樣的:
#下面定義一個類 class person: def get_age(self): return age def get_name(self): return name
當然上面的類你會報錯,但是我們只需要知道思想,首先我們定義了一個類,然后里面有方法,然后方法給我們返回了一些值,然后我們要使用這個類的方法時是不是需要先去實例化一個對象出來?現在我們只是有類,但是沒對象,沒有具體的張三還是李四。所以我們需要怎么做嗯?是不是就有了下面的代碼:
zhangsan=person(),然后如果要用張三的年齡是不是就變成了zhangsan.get_age(),但是這里問題來了,我返回了age,但是我是不知道你zhangsan具體有多少歲的啊,你沒有告訴我。對吧?那么我是不是需要先告訴這個person?在創造他的時候就說,zhangsan你有3歲,名字叫做張三,對吧。那是不是也就是說我在zhangsan=person() 這個實例化時就需要傳入名字和年齡?是不是就變成了zhangsan=person(‘張三’,‘3’),既然我們實例化時傳入了兩個參數,但是在我們的person類里面有這兩個參數的地方嗎?或者說有獲取他的地方嗎?沒有!在我們python里面實例化時默認調用的是無參的構造函數,那么這里我們需要把他變成有參數的構造函數,那么就變成了下面這個樣子:
#類 class person: def __init__(self,age,name): self.age = age self.name = name def get_age(self): return self.age def get_name(self): return self.name
看出區別了嗎?在我們類下面多了一個函數__init__,這就是我們python的構造函數,在你實例化這個類時會自動調用這個方法,所以我們實例化類時傳入了兩個參數也就在這里傳入了兩個參數,同樣的我們這里也就獲取了兩個值,因為我們調用get_age的時候這個全局的age已經在我們實例化時獲取到了,所以這里直接調用就獲取到了。現在知道構造函數的作用了么?實戰吧!