類就是型別,型別就是類

2021-09-07 18:44:57 字數 2310 閱讀 9634

1、python沒有顯式宣告變數型別,不代表寫**時候可以沒有型別概念,當使用三方包時候,三方包的方法經常返回乙個三方包裡面的自定義的類的例項,就是不是普通的int str list dict這些型別,得到這麼個變數怎麼處理他手足無措,連自己寫的變數是什麼型別的都是模糊的,那寫**就是蒙蔽的靠猜,或者只能生搬硬套網上的寫法,多年前開始寫py就一直是這麼乙個蒙蔽的狀態。

2、pycahrm是有自動方法補全的,任何變數都是某個類的例項,所以當變數加上 . 這個符號,就可以自動補全了,一定程度弱化了需要知道型別的必要性。但是有些情況下多層返回沒有寫標準的注釋或者返回是帶if分支的,pycharm決定不了到底是什麼型別,那就補全不了,當使用這個變數時候,怎麼使用他就沒有pycharm自動補全提示了,必須要找到變數的型別,就是找到變數是哪個類例項化出來的,這樣才能使用這個變數。

4、如果從不寫類,就不熟悉類,呼叫三方庫存在很多障礙,純看教程文件的api是很得到很詳細的使用方法,必須定位到三方包的那個類,才能更好的使用。

5、很多笨豬說寫**從不需要類,說requests.get是函式,pymsql的conect都是函式,人家三方庫高手全是寫函式,自己為什麼需要類 。這樣認為就大錯特錯了

pymsql裡面的連線是connection類。

拿pymsql類來說,__init__.py裡面

所以看到網上那個的大部分這個寫法,看到是在呼叫函式一樣 :conn=pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='tkq1', charset='utf8')

其實是在裡面例項化乙個connection類了,上面的寫法等同於conn=pymysql.connection(host='127.0.0.1', port=3306, user='root', passwd='', db='tkq1', charset='utf8'),那麼後續得到這個conn變數後怎麼使用他,知道他的型別是connection就好辦了

再來說requests的get函式,也是使用了類

可以看到get函式呼叫request函式,request函式是例項化了乙個session類,並且返回了乙個response類的例項。(這也是為什麼要保持cookie在連續訪問時候,不能使用get函式,因為每次都新例項化session類造成cookie不能在多個請求中共享,要直接使用session類的原因了)

7、而且requests的get函式返回得到的變數的型別是response,所以命名上最好是 resp 或者response = requests.get(url) ,見過不少人喜歡寫text = requests.get(url) ,真的很讓人困惑,**長了不知道寫的什麼玩意。這 樣命名就好像喜歡寫 x_list = ,y_dict = [3,4,5],這種寫**沒時候有型別意識的,真得是只有自己能看懂,非常的不好。例如下面這樣的,**一長就弄混了,把a變數誤認為了是a型別,誤人。

class a():

pass

class b():

pass

b = a()

a = b()

8、類和模組比,在多例項(模組只能是單例)和繼承後者組合都有很大優勢。自己從不寫類,就會造成除了基本型別 字串 整形 列表型別 字典型別 元祖型別和一些三方庫的型別以外,沒有自己的型別。還會造成使用新的三方包庫的時候,手足無措,學用起來很慢,必須找個網上現成的例子照抄。

9、類就是型別,型別就是類,如果還認為不需要學習類,那就是覺得不需要知道**中的變數是什麼型別了。

lua 定義類 就是這麼簡單

在網上看到這樣一段 真是誤人子弟呀,具體就是 lua類的定義 如下 local clsnames local setmetatable setmetatable local getmetatable getmetatable function class classname,basecls if c...

2946 填空 間接基類就是A

2946 填空 間接基類就是a time limit 1 sec memory limit 128 mb submit 110 solved 81 submit status web board description 如下程式所示,d繼承自b和c,而b和c均繼承自a。根據繼承的機制,d的物件將擁有...

string型別其實就是乙個指標

listlisturl new list 類鍊錶 ajaxclass ajaxclass new ajaxclass ajaxclass.name 美男1號 ajaxclass.url listurl.add ajaxclass ajaxclass.name 美男2號 ajaxclass.url l...