Python面向對象
類和方法
對象object,實例instance
屬於某個類的一個具體個體
類class
對同一類事物共同屬性特征和能做事的概括 類名大寫開頭
類變量
屬於某一個類的自己的變量
work(self)定義的時候
必須有,調用的時候不能傳
1 定義類: 2 class 類名: 3 ....屬性 4 ....方法 5 ....def 方法名(self,....): 6 #【第一個參數默認self,定義時必須有,調用不用傳,是當前類的對象】
類定義完不調用,不會執行,類內方法需要通過對象調用
生成對象
通過構造方法生成。 類名(.....)
實例變量
屬於對象他自己的屬性
1 zs = Ren() 2 zs.work() 3 zs.name='zhangsan' 《《《《 4 print(zs.name)
沒有實例方法
構造方法/構造函數
生成對象必會調用構造方法
-
- 方法名是固定的 __init__
- 通過類名調用,即Ren()就調用
- 不能寫return語句,默認返回對象
- 定義類時,若沒有構造,系統默認創建
1 class Ren: 2 ....def __init__(self,a): 3 ....print('‐‐‐helloworld‐‐‐') 4 5 zs=Ren(asfasaf) # 傳到a里面
繼承
子類繼承父類
1 class BlackPerson(Ren,Animal): 2 ....color='black' 3 ....def run(self): 4 ........print('‐‐‐‐‐run fast‐‐‐‐‐')
子類間不能互相調用,沒有關系
子類可以繼承多個父類
注意避免邏輯混亂,相互繼承,或既是父類又是父類的父類
高內聚,能復用盡可能復用
低耦合,能拆開盡可能拆開
繼承盡量避免超過3代
構造函數的繼承
子類有用子類的
同時繼承多個父類,用先繼承的
父類還有父類,向上追溯
都沒有,系統創建
同名屬性的繼承
同上,都沒有就報錯
同名函數的繼承
override覆蓋、overwrite重寫:子類有父類同名的屬性方法,方法名相同,參數也相同
overloading 重載:子類有父類同名的方法,方法名相同,參數不同
super(類1,對象1)
對象1調用類1的父類屬性,方法
1 super(Ren,bp).run()
身份運算符is
通過判斷存儲id相同
isinstance(對象1,類1)
判斷對象1是否是類1的對象,是返回True否返回False
isinstance() 與 type() 區別:
type() 不會認為子類是一種父類類型,不考慮繼承關系。
isinstance() 會認為子類是一種父類類型,考慮繼承關系。
如果要判斷兩個類型是否相同推薦使用 isinstance()。
1 >>>a = 2 2 >>> isinstance (a,int) 3 True 4 >>> isinstance (a,str) 5 False 6 >>> isinstance (a,(str,int,list)) # 是元組中的一個返回 True 7 True
issubclass(類1,類2)
判斷類1是否是類2的子類,是返回True否返回False
private
__開頭,私有的,有效范圍在class內部,出了class邊界,類對象子類對象都不能調用
protected
_開頭,受保護的,不建議跨文件包調用,但是from...import* 出錯
模塊
調用:
本文件調用:
方法名(....參數值....)
跨文件調用:
1 #########[法1]######### 2 import 包1.包2.包3....文件名 3 包1.包2.包3....文件名.方法名(....參數值....) 4 #########[法2]######### 5 from 包1.包2.包3....文件名 import 方法名【*:代替所有方法名】 6 方法名(....參數值....)
常用方法 :
1 import time 2 time.strftime("%Y‐%m‐%d %H:%M:%S",time.localtime()) 3 %Y # 4位年 4 %y # 2位年 5 %m # 月 6 %d # 日 7 %H # 24小時制小時 8 %I # 12小時制小時 9 %M # 分 10 %S # 秒 11 time.sleep(數字) 12 # 當前進程休眠 數字 秒
1 import calendar 2 calendar.isleap(年): 判斷年是否是閏年,如果是返回True,否則返回False
1 import random 2 random.randint(數字1,數字2):生成 》=數字1,《=數字2的整數的一個隨機數
數據的讀取
1 import pymysql 2 ###創建連接 host:數據庫地址,user:用戶,passwd:密碼,db:數據庫名 3 conn=pymysql.connect(host='localhost',user='root',passwd='',db='test1') 4 cursor=conn.cursor()
1 #通過游標執行sql語句,返回影響條數 2 ###增加一條 3 cursor.execute('update student set s_name=\'qingcai\' where s_id=1') 4 conn.commit() 5 6 ###返回查詢結果 條數 7 aa=cursor.execute('select * from student') 8 print(aa) 9 ###返回查詢結果一條 10 bb=cursor.fetchone() 11 print(bb) 12 ###返回查詢結果多條 13 cc=cursor.fetchmany(2) 14 print(cc) 15 ###返回查詢所有條 16 dd=cursor.fetchall() 17 print(dd) 18 19 ###關閉游標 20 cursor.close() 21 ###關閉連接 22 conn.close()